您的位置:首页 > 编程语言 > C#

C#关键字 - class和struct

2010-06-25 17:38 190 查看
class 用来声明类,struct用来声明结构

类 class:

是面向对象变成的基本概念,是一种自定义数据的结构类型,通常包括:字段、属性、方法、构造函数、索引器、操作符等等。

类是引用类型,可以继承和被继承,所有的类都继承自System.Object类。

类通过new 来创建对象的实例,这个过程叫做实例化。在new一个类的实例的时候,对象保存了该实例的实际数据的引用地址,而对象的值保存在托管堆中(managed heap)

声明:

public class MyClass{}

实例化:

MyClass aclass=new MyClass();

非静态类:通过创建赋给变量的“对象”或“实例”来使用类。

静态类:静态类用sealed来修饰,静态类不能被实例化,只能通过类来访问。

结构 struct:

结构是一种值类型,结构将一组相关的信息变量组织变为一个单一的变量实体。

结构继承自System.ValueType类,是值类型. struct实例分配在线程的堆栈(stack)上,它本身存储了值,但是不包括指向该值的指针。在使用strcut时,我们可以把他当作int, char这样的基本类型来对待。

strcut的声明和class相同

声明:

public struct MyStruct{}

实例化:

MyStruct astruct=new MyStruct();

结构也可以不用new 来进行实例化:

MyStruct asruct;

但是如果不用new来实例化结构,其所有的字段将会处于未分配状态,只有对字段进行初始化,才能引用,否则,引用未赋值的字段会导致编译错误。如下,此时showMsg()的调用将会出错,只有将i和j都初始化才能对它进行引用,或者用new来实例化。

struct MyStruct
{
public int i;
public string j;
public void showMsg()
{
Console.WriteLine("aaaa");
}
}
public class TestStruct
{
public static void Main()
{
MyStruct astruct;
//MyStruct astruct=new Mystruct();
//astruct.i = 1;
//astruct.j = "a";
astruct.showMsg();

}
}


类和结构的异同点:

相同点:语法类似

不同点:

class是引用类型,继承自System.Object类;struct是值类型,继承自System.ValueType类。

从职能观点来说,class表现为行为;而struct常用于存储数据

class支持类和接口的继承;struct不能从类继承,也不能做类的基类,但是由于strcut是值类型,它支持接口继承

class可以声明无参构造函数,可以声明析构函数;struct只能声明带参数的构造函数,而且不能声明析构函数。

class必须用new来进行实例化;struct可以不用new来实例化

class可以是抽象类,可以声明抽象函数;struct不能为抽象的,不能声明抽象函数

class可以声明protected、virtual、sealed和override成员;struct不可以,但是struct可以重载system.object的三个虚方法:Equals()、ToString()个GetHashTable().

class实例由垃圾回收机制来保证内存的回收处理;struct的变量在使用完以后立即自动解除内存分配。

class的内存分配与托管堆;struct的内存分配与线程的堆栈上。

结构可以作为null的类型,因而可以向其赋null值。

结构在赋值时进行复制。将结构赋值给新的变量时,将复制所有数据,并对新的副本所做的修改不会影响原始副本的数据。

在结构声明中,除非字段被声明为 const 或 static,否则无法初始化???(from MSDN)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: