接口和抽象类

接口

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#从入门到精通》读后总结

原文地址:https://www.cnblogs.com/hmliang/p/5303998.html