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

类
1
namespace DemoLib.Demo1
2

{
3
delShowMessage 委托#region delShowMessage 委托
4
/**//// <summary>
5
/// 委托
6
/// </summary>
7
/// <param name="message"></param>
8
public delegate void delShowMessage(string message);
9
#endregion
10
11
Person 人类(类)#region Person 人类(类)
12
/**//// <summary>
13
/// 人类(类)
14
/// </summary>
15
public class Person
16
{
17
name (字段)#region name (字段)
18
/**//// <summary>
19
/// 名称
20
/// </summary>
21
private string name;
22
#endregion
23
24
Name 名字(属性)#region Name 名字(属性)
25
/**//// <summary>
26
///
27
/// </summary>
28
public string Name
29
{
30
get
31
{
32
return name;
33
}
34
set
35
{
36
name = value;
37
}
38
}
39
#endregion
40
41
Person 构造函数#region Person 构造函数
42
/**//// <summary>
43
/// 无参构造函数
44
/// </summary>
45
public Person()
46
{
47
name = "unknown";
48
}
49
50
/**//// <summary>
51
/// 有参构造函数
52
/// </summary>
53
/// <param name="name">名称</param>
54
public Person(string name)
55
{
56
this.name = name;
57
}
58
#endregion
59
60
MessageEvent 事件#region MessageEvent 事件
61
/**//// <summary>
62
///
63
/// </summary>
64
public event delShowMessage MessageEvent;
65
#endregion
66
67
MyIntroduce 自我介绍 (方法)#region MyIntroduce 自我介绍 (方法)
68
/**//// <summary>
69
///
70
/// </summary>
71
/// <returns></returns>
72
public string MyIntroduce()
73
{
74
return "我的名字叫:" + this.name;
75
}
76
#endregion
77
78
TalkMessage 说些消息 (方法)#region TalkMessage 说些消息 (方法)
79
/**//// <summary>
80
///
81
/// </summary>
82
/// <param name="message">消息内容</param>
83
/// <returns></returns>
84
public string TalkMessage(string message)
85
{
86
return "消息内容是:" + message;
87
}
88
#endregion
89
90
ShowMessage 显示消息 (静态方法)#region ShowMessage 显示消息 (静态方法)
91
/**//// <summary>
92
///
93
/// </summary>
94
/// <param name="message">消息内容</param>
95
/// <returns></returns>
96
public static string ShowMessage(string message)
97
{
98
return "消息内容是:" + message;
99
}
100
#endregion
101
102
}
103
#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);
}
}