C#中关于抽象类和接口的问题
抽象类与接口的问题
- 抽象类:抽象类不可被创建对象。如果类被定义成抽象类,它就可以定义许多抽象成员。其中的抽象方法是纯粹的协议,没有提供默认的实现过程。当你希望定义没有提供默认实现而必须在每个派生类中实现的成员时,可以使用抽象成员,这样就强制抽象类的每一个派生类必须自己处理抽象方法的细节。
- 接口:接口就是一组抽象成员的集合,通常.NET接口多以大写字母“I”为前缀。接口成员总是抽象的,每一个连接接口的对象可以以自己的方式去实现这些方法。最重要的是如果一个类连接了一个接口,那么这个类必须充实接口内的所有抽象成员。
抽象类和接口的定义
abstract class Shape{……} //抽象类的创建
interface Ipointy{........} //接口的创建
类实现接口
VS2010编译环境中,在定义的类实现一个接口时,发现一个问题。
class car:Interface1
{
public int Speed { get; set; }
public string CarName { get; set; }
public car() { }
public car(string name, int speed)
{
Speed = speed; CarName = name;
}
public string ecoMachine
{
get { return string.Format("本车电子系统"); }
}
}
}
public interface Interface1
{
string ecoMachine();
}
将接口Interface1实现到类car中时,在主函数编译会出现如下问题。
static void Main(string[] args)
{
car mycar = new car("Benz", 150);
Console.WriteLine(mycar.ecoMachine);
}
错误 1 “CustomException.car”不实现接口成员“CustomException.Interface1.ecoMachine()” C:\Users\86156\Desktop\C# TEST\CustomException\CustomException\B.cs 8
该error是因为类car中并未实现接口。需要在类后引用的接口名称处选择实现接口,否则即使public class car:Interface1也是无效的。
接口实现的一些问题
在我们实例化一个连接接口的类的对象时(这个对象内也多态定义了接口的抽象方法),直接在对象级别调用接口成员是类与给定接口最直接的交互方式。但是如果这个类支持很多接口,我们在类实例对象调用接口成员时,这个成员所在接口并没有被这个类实现呢?如何才能动态判断一个类型支持哪些接口呢?
- as关键字:
Car myCar=new Car("Benz",50);
//创建类Car的对象myCar,赋值myCar的名字为Benz,速度为50
Interface1 inFace=myCar as Interface1;
//将inFace作为myCar对象在接口InterFace里的引用,若inFace返回为空,则myCar所在的类Car不实现接口Interface
if(inFace==null){......} //即不实现接口Interface
- is关键字:部分如上
if(inFace is InterFace) 返回为真则实现接口