C#中抽象类和接口的问题

来源:百度知道 编辑:UC知道 时间:2024/09/21 00:24:42
麻烦告诉下C#的抽象类里面可不可以定义字段和属性
还有抽象类和接口在实际运用中怎么区分?最好有实例告诉!谢谢了!!

抽象类里面可不可以定义字段和属性。

Interface和抽象类的共同点是都不可以实例化,都包含没有实现的虚函数(Interfae是所有成员,抽象类有可能只是一部分)。

所谓Interface,是对从其继承的类所提供属性和公有函数的一种类型抽象。
所有从这个Interface继承的子类,必须实现Interface所提供的所有接口(包括属性和函数,但不需要用override关键字)。Interface的所有成员都是默认并且必须为public的。Interface不允许有成员变量和构造函数。
而抽象类可以有私有成员变量和函数,也可以由构造函数(但不能通过这个函数实例化这个类)。从抽象类继承的子类,只需要实现抽象类中为abstract的成员,抽象类不为abstract的可以override也可以不用。

从内存的角度来说,子类实例化的时候,会为抽象类划出来一块堆内存,用来存储抽象类的成员变量,而Interface没有成员变量,所以就不用开辟堆内存。
(当然用来存储函数首地址的空间是省不了的)。

例:
interface A1
{
string Name { get;}
void ATest();
}

abstract class B1
{
//抽象类成员变量
private int _iValue;
public int Value
{
get{return _iValue;}
}

public B1()
{
_iValue = 10;
}

//抽象函数
public abstract void BTest();
}

class SubClass : B1,A1
{
private string _strName;
/