c#中的类是最常见的实际上就是对某种类型的对象定义变量和方法的原型。
结构是值类型,而类是引用类型。
1.与类不同,结构的实例化可以不使用 new 运算符。结构可以声明构造函数,但它们必须带参数。
2.一个结构不能从另一个结构或类继承,而且不能作为一个类的基。所有结构都直接继承自 System.ValueType,后者继承System.Object。
3.结构可以实现接口。结构在定义变量时不能给定初始值。如果要在结构中使用构造函数则必须给所有的变量赋值。
接口是引用类型的,类似于类,和抽象类的相似之处有三点:
1. 不能实例化;
2. 包含未实现的方法声明;
3. 派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员(不仅是方法包括其他成员);
另外,接口有如下特性:
接口除了可以包含方法之外,还可以包含属性、索引器、事件,而且这些成员都被定义为公有的。除此之外,不能包含任何其他的成员,例如:常量、域、构造函数、析构函数、静态成员。一个类可以直接继承多个接口,但只能直接继承一个类(包括抽象类)。
抽象类是特殊的类,只是不能被实例化;除此以外,具有类的其他特性;重要的是抽象类可以包括抽象方法,这是普通类所不能的。抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们。另外,抽象类可以派生自一个抽象类,可以覆盖基类的抽象方法也可以不覆盖,如果不覆盖,则其派生类必须覆盖它们。
抽象类和接口的区别
1.类是对象的抽象,抽象类可以理解为把类当做对象,抽象成的类叫做抽象类,而接口是一个行为的规范或者规定,抽象类更多的是定义在一系列紧密相关的类间,而接口大多数是关系输送但都实现某一功能的类中;
2.接口基本上不具备继承的任何具体特点,仅仅承诺了能够调用的方法;
3.一个类一次可以实现多个接口,但是只能扩展一个父类;
4.接口可以用于支持回调,而继承不具备这个特点;
5.抽象类不能被密封;
6.抽象类实现的具体方法默认为虚的,但实现接口的类中的接口方法默认为非虚的,当然也可以申明为虚的;
7.如果抽象类实现接口,则可以把接口中方法映射到抽象类中最为抽象方法而不必实现,而在抽象类的子类中实现接口中方法。
抽象类和接口的使用:
1. 如果预计要创建组件的多个版本,则创建抽象类。抽象类提供简单的方法来控制组件版本;
2.如果创建的功能将在大范围的全异对象间使用,则使用接口。如果要设计小而简练的功能块,则使用接口;
3.如果要设计大的功能单元,则使用抽象类。如果要在组件的所有实现间提供通用的已实现功能,则使用抽象类;
4.抽象类主要用于关系密切的对象;而接口适合为不相关的类提供通用功能。