1、结构是值类型,类则是引用类型。因此前者是放在栈(Stack)里,后者则仅仅是将引用地址存放在栈里,而具体的值则存放在堆(heap)里。
2、据第1点可以得出结论,那就是类对象通常用来传递大数据,而结构对象则用来传递小数据。
3、类可以被继承,而结构则不支持。
4、结构对象不能像类对象一样赋值为null。
5、结构不能像类一样定义析构器。
6、结构不能像类一样定义为抽象的。
7、在结构中不能重写方法,除非是object类型的如下方法:
Equals() GetHashCode() GetType() ToString()
若要让结构具有多态特性,可以让其实现接口。
8、在类中定义的事件是线程安全的,而结构则不是。
9、结构总是具有一个默认的公共无参构造函数,但去不能像类一样定义私有的无参构造函数:
struct Me
{
private Me() // compile-time error
{
}
}
class Me
{
private Me() // runs Ok{
}
10、类中的静态构造函数会被调用,而结构却不能。因此在结构中定义的静态构造函数,虽然可以编译 通过,但却没有价值:
struct myStructure
{
static myStructure()
{
Console.WriteLine("This is me a structure");
}
}
class myClass
{
static myClass()
{
Console.WriteLine("This is me a class");
}
}
class Program
{
static void Main(string[] args)
{
myStructure s = new myStructure();//Nothing happen
myClass c = new myClass();//Will out put This is me a class
Console.Read();
}
}
11、结构不能像类一样定义volatile字段。volatile字段主要用于并发,它相当于方法体的lock。
12、可以对结构类型使用sizeof,对类则不行。
13、类的字段会被自动初始化为0/false/null,而结构则不能。
14、在结构中不能直接对字段初始化,而类则可以。
struct myStructure
{
public string x = 2;//Not allowed
}
class myClass
{
public string x = 2; //Allowed
}
15、结构和类对于System.Object.Equals()方法的体现是不相同的。 |