主要描述对象,类,结构对象
 对象
 对象是具有数据、行为和标识的编程结构。
对象数据包含在对象的字段、属性和事件中,对象行为则由对象的方法和接口定义。
 对象具有标识, 数据集相同的两个对象不一定是同一对象。
 C# 中的对象通过 class 和 struct 定义。
对象具有以下特点:
C# 中使用的全都是对象,例如 Windows 窗体和控件。
对象是实例化的;对象是从类和结构所定义的模板中创建的。
对象使用属性获取和更改它们所包含的信息。
对象通常具有允许它们执行操作的方法和事件。
所有 C# 对象都继承自 Object。
类(class)
类是 C# 中功能最为强大的数据类型。
像结构一样,类也定义了数据类型的数据和行为。
可以创建作为此类的实例的对象。
与结构不同,类支持继承。
类是使用 class 关键字来定义的,类的名称位于 class 关键字的后面。
定义的其余部分是类的主体,用于定义行为和数据。
类的字段、属性、方法和事件统称为“类成员”。
尽管有时类和对象可互换,但它们是不同的概念。
类定义对象的类型,但它不是对象本身。对象是基于类的具体实体,有时称为类的实例。
通过使用 new 关键字(后跟对象将基于的类的名称)可以创建对象。
继承是通过使用“派生”来实现的,而派生意味着类是使用“基类”声明的,它的数据和行为从基类继承。
类具有以下特点:
C# 只支持单继承:类只能从一个基类继承实现。
一个类可以实现多个接口。
类定义可在不同的源文件之间进行拆分。
静态类是仅包含静态方法的密封类。
代码

 类
类
  1 namespace DemoLib.Demo1
namespace DemoLib.Demo1
  2

 {
{
  3
 delShowMessage 委托#region delShowMessage 委托
    delShowMessage 委托#region delShowMessage 委托
  4
 /**//// <summary>
    /**//// <summary>
  5 /// 委托
    /// 委托
  6 /// </summary>
    /// </summary>
  7 /// <param name="message"></param>
    /// <param name="message"></param>
  8 public delegate void delShowMessage(string message);
    public delegate void delShowMessage(string message);
  9 #endregion
    #endregion
 10
 11
 Person 人类(类)#region  Person 人类(类)
    Person 人类(类)#region  Person 人类(类)
 12
 /**//// <summary>
    /**//// <summary>
 13 /// 人类(类)
    /// 人类(类)
 14 /// </summary>
    /// </summary>
 15 public class Person
    public class Person
 16
 
     {
{
 17
 name (字段)#region name (字段)
        name (字段)#region name (字段)
 18
 /**//// <summary>
        /**//// <summary>
 19 /// 名称
        /// 名称 
 20 /// </summary>
        /// </summary>
 21 private string name;
        private string name;
 22 #endregion
        #endregion
 23
 24
 Name 名字(属性)#region  Name 名字(属性)
        Name 名字(属性)#region  Name 名字(属性)
 25
 /**//// <summary>
        /**//// <summary>
 26 ///
        /// 
 27 /// </summary>
        /// </summary>
 28 public string Name
        public string Name
 29
 
         {
{
 30 get
            get
 31
 
             {
{
 32 return name;
                return name;
 33 }
            }
 34 set
            set
 35
 
             {
{
 36 name = value;
                name = value;
 37 }
            }
 38 }
        }
 39 #endregion
        #endregion
 40
 41
 Person 构造函数#region  Person 构造函数
        Person 构造函数#region  Person 构造函数
 42
 /**//// <summary>
        /**//// <summary>
 43 /// 无参构造函数
        /// 无参构造函数
 44 /// </summary>
        /// </summary>
 45 public Person()
        public Person()
 46
 
         {
{
 47 name = "unknown";
            name = "unknown";
 48 }
        }
 49
 50
 /**//// <summary>
        /**//// <summary>
 51 /// 有参构造函数
        /// 有参构造函数
 52 /// </summary>
        /// </summary>
 53 /// <param name="name">名称</param>
        /// <param name="name">名称</param>
 54 public Person(string name)
        public Person(string name)
 55
 
         {
{
 56 this.name = name;
            this.name = name;
 57 }
        }
 58 #endregion
        #endregion
 59
 60
 MessageEvent 事件#region MessageEvent 事件
        MessageEvent 事件#region MessageEvent 事件
 61
 /**//// <summary>
        /**//// <summary>
 62 ///
        /// 
 63 /// </summary>
        /// </summary>
 64 public event delShowMessage MessageEvent;
        public event delShowMessage MessageEvent;
 65 #endregion
        #endregion
 66
 67
 MyIntroduce 自我介绍 (方法)#region MyIntroduce 自我介绍 (方法)
        MyIntroduce 自我介绍 (方法)#region MyIntroduce 自我介绍 (方法)
 68
 /**//// <summary>
        /**//// <summary>
 69 ///
        /// 
 70 /// </summary>
        /// </summary>
 71 /// <returns></returns>
        /// <returns></returns>
 72 public string MyIntroduce()
        public string MyIntroduce()
 73
 
         {
{
 74 return "我的名字叫:" + this.name;
            return "我的名字叫:" + this.name;
 75 }
        }
 76 #endregion
        #endregion
 77
 78
 TalkMessage 说些消息 (方法)#region TalkMessage 说些消息 (方法)
        TalkMessage 说些消息 (方法)#region TalkMessage 说些消息 (方法)
 79
 /**//// <summary>
        /**//// <summary>
 80 ///
        /// 
 81 /// </summary>
        /// </summary>
 82 /// <param name="message">消息内容</param>
        /// <param name="message">消息内容</param>
 83 /// <returns></returns>
        /// <returns></returns>
 84 public string TalkMessage(string message)
        public string TalkMessage(string message)
 85
 
         {
{
 86 return "消息内容是:" + message;
            return "消息内容是:" + message;
 87 }
        }
 88 #endregion
        #endregion
 89
 90
 ShowMessage 显示消息 (静态方法)#region ShowMessage 显示消息 (静态方法)
        ShowMessage 显示消息 (静态方法)#region ShowMessage 显示消息 (静态方法)
 91
 /**//// <summary>
        /**//// <summary>
 92 ///
        /// 
 93 /// </summary>
        /// </summary>
 94 /// <param name="message">消息内容</param>
        /// <param name="message">消息内容</param>
 95 /// <returns></returns>
        /// <returns></returns>
 96 public static string ShowMessage(string message)
        public static string ShowMessage(string message)
 97
 
         {
{
 98 return "消息内容是:" + message;
            return "消息内容是:" + message;
 99 }
        }
100 #endregion
        #endregion
101
102 }
    }
103 #endregion
    #endregion
104 }
} 
结构struct
 结构是使用 struct 关键字定义的
结构与类共享大多数相同的语法,但结构比类受到的限制更多: 
在结构声明中,除非字段被声明为 const 或 static,否则无法初始化。
结构不能声明默认构造函数(没有参数的构造函数)或析构函数。
结构是值类型。如果从结构创建一个对象并将该对象赋给某个变量,则该变量包含结构的全部值。
复制包含结构的变量时,将复制所有数据,对新副本所做的任何修改都不会改变旧副本的数据。
由于结构不使用引用,因此结构没有标识;无法区分具有相同数据的两个值类型实例。
C# 中的所有值类型都继承自 ValueType,引用类型继承自 System.Object。
结构具有以下特点:
结构是值类型,而类是引用类型。
与类不同,结构的实例化可以不使用 new 运算符。
结构可以声明构造函数,但它们必须带参数。
一个结构不能从另一个结构或类继承,而且不能作为一个类的基类。
所有结构都直接继承自 System.ValueType。
结构可以实现接口。
结构可用作可为 null 的类型,因而可向其赋 null 值。
代码

 结构
结构
public struct TestStruct
{
    public int x, y;
    public TestStruct(int p1, int p2)
    {
        x = p1;
        y = p2;
    }
}
class TestStruct 
{
    static void Main()
    {
        // Initialize:   
        TestStruct point1 = new TestStruct();
        TestStruct point2 = new TestStruct(10, 10);
        // Display results:
        System.Console.Write("TestStruct1: ");
        System.Console.WriteLine("x = {0}, y = {1}", point1.x, point1.y);
        System.Console.Write("TestStruct2: ");
        System.Console.WriteLine("x = {0}, y = {1}", point2.x, point2.y);
    }
}