接口和抽象类
接口
1.接口是一个用来定义程序的协议,它描述可属于任何类或结构的一组相关行为。接口可由方法、属性、事件和索引器或这4种成员类型的任何组合构成,但不能包含字段。
接口具有以下特征:
a).接口类似于抽象基类:继承接口的任何非抽象类型都必须实现接口的所有成员。
b).不能直接实例化接口。
c).接口可以包含事件、索引器、方法和属性。
d).接口不包含方法的实现。
e).类和结构可从多个接口继承。
f).接口自身可从多个接口继承。
修饰符 interface 接口名称 : 继承的接口列表
{
接口内容;
}
说明:
a).声明接口时,除interface关键字和接口名称外,其他的都是可选项。
b).可以使用new、public、protected、internal和private等修饰符声明接口,但接口成员必须是公共的。
2.接口的实现与继承
interface IPeople
{
string Name
{
get;
set;
}
}
calss Program : IPeople
{
string name = "";
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
}
IPeople iPeople = new Program();
iPeople.Name = “Tom”;
3.显式接口成员实现
interface ImyInterface1
{
int Add();
}
interface ImyInterface2
{
int Add();
}
calss MyClass: ImyInterface1, ImyInterface2
{
int ImyInterface1.Add()
{
Return 3+5;
}
int ImyInterface2.Add()
{
return 1+3+5;
}
}
MyClass myClass = new myClass();
ImyInterface1 imyInterface1 = myClass;
Console.WriteLine(imyInterface1.Add());
注:
a).显式接口成员实现中不能包含访问修饰符、abstract、virtual、override或static修饰符。
b).显式接口成员属于接口的成员,而不是类的成员,因此,不能使用类对象直接访问,只能通过接口对象来访问。
抽象类与抽象方法
1.抽象类主要用来提供多个派生类可共享的基类的公共定义,它与非抽象类的主要区别:
a).抽象类不能直接实例化。
b).抽象类中可以包含抽象成员,但非抽象类中不可以。
c).抽象类不能被密封。
访问修饰符 abstract class 类名:基类或接口
{
//类成员
}
说明:声明抽象类时,除abstract关键字、class关键字和类名外,其他的都是可选项。
2.抽象方法概述及声明
抽象方法就是在声明方法时,加上abstract关键字,声明抽象方法时需要注意以下两点:
a).抽象方法必须声明在抽象类中。
b).声明抽象方法时,不能使用virtual、static和private修饰符。
public abstract class MyClass
{
public abstract void method();
}
3.抽象类与接口
抽象类和接口的区别主要有以下几点:
a).它们的派生类只能继承一个基类,即只能直接继承一个抽象类,但可以继承任意多个接口。
b).抽象类中可以定义成员的实现,但接口中不可以。
c).抽象类中可以包含字段、构造函数、析构函数、静态成员或常量等,接口中不可以。
d).抽象类中的成员可以是私有的(只要它们不是抽象的)、受保护的、内部的或受保护的内部成员,但接口中的成员必须是公共的。
注:抽象类和接口这两种类型用于完全不同的目的。抽象类主要用作对象系列的基类,共享某些主要特性,例如共同的目的和结构。接口则主要用于类,这些类在基础水平上有所不同,但仍可以完成某些相同的任务。
密封类与密封方法
1.C#中使用密封类时,如果类满足如下条件,则应将其密封:
a).类是静态类。
b).类包含带有安全敏感信息的继承的受保护成员。
c).类继承多个虚成员,并且密封每个成员的开发和测试开销明显大于密封整个类。
d).类是一个要求使用反射进行快速搜索的属性。密封属性可提高反射在检索属性时的性能。
访问修饰符 sealed class 类名:基类或接口
{
//类成员
}
说明:
a).密封类不能作为基类被继承,但它可以继承别的类或接口。
b).在密封类中不能声明受保护成员或虚成员,因为受保护成员只能从派生类进行访问,而虚成员只能在派生类中重写。
c).由于密封类的不可继承性,因此密封类不能声明为抽象的,即sealed修饰符不能与abstract修饰符同时使用。
《C#从入门到精通》读后总结