C#学习之接口和抽象类

来源:互联网 发布:mac mini 2016会更新吗 编辑:程序博客网 时间:2024/06/05 05:25

坚持 成长 每日一篇

前言

一,接口和抽象类的相同点
1.抽象类和接口都包含可以由派生类继承的成员。
2.接口和抽象类都不 能直接实例化,但可以声明这些类型的变量。
3.可以声明接口和抽象类型的变量,变量可以指向派生类(继承接口或抽象类的类型)的对象,但是变量不能访问派生类的其他成员(函数或方法)

二,接口和抽象类的区别
1.派生类只能继承一个抽象类,但是可以继承多个接口
2.抽象类可以拥有函数体的非抽象方法,抽象方法必须在派生类种实现,出发派生类也是抽象的
接口成员必须都在使用接口的类上实现,他们没用函数体。
接口成员可以在使用该接口的抽象类上以抽象方法的方式实现
3.接口成员都是共有的,但是抽象成员确可以是私有的,受保护的,内部的
4.接口不能包含字段,构造函数,析构函数、静态成员或常量

三,两者的作用
抽象类主要用作对象系列的基类,共享某些主要特性,例如,共同的目的和结构。 接口则主要用于类,这些类在基础水平上有所不同,但仍可以完成某些相同的任务。

四,接口成员的定义与类成员的定义相似,但有几个重要的区别:
1.不允许使用访问修饰符(public、private、protected或internal),所有的接口成员都是公共的。接口成员不能包含代码体。
2.接口不能定义字段成员。
3.接口成员不能用关键字static、virtual、abstract或sealed来定义。
4.类型定义成员是禁止的。
5.但要隐藏继承了基接口的成员,可以用关键字 new 来定义它们
6.在接口中定义的属性可以定义访问块 get 和 set 中的哪一个能用于该属性(或将它们同时用于该 属性)
7.继承一个实现给定接口的基类,就意味着派生类隐式地支持这个接口

实例

1.在接口中定义的属性可以定义访问块 get 和 set 中的哪一个能用于该属性(或将它们同时用于该 属性)

interface IMyInterface {  int MyInt { get; set; }}

2.实现接口的类必须包含该接口所有成员的实现代码,且必须匹配指定的签名(包括匹配指定的 get 和 set 块),并且必须是公共的。

public interface IMyInterface {  void DoSomething();  void DoSomethingElse();}
public class MyClass : IMyInterface {  public void DoSomething()  {   }  public void DoSomethingElse()  {  } }

3.要隐藏继承了基接口的成员,可以用关键字 new 来定义它们,例如:

interface IMyBaseInterface {  void DoSomething(); }interface IMyDerivedInterface : IMyBaseInterface {  new void DoSomething(); }

4.可以使用关键字 virtual 或 abstract 来实现接口成员,但不能使用 static 或 const。还可以在基类 上实现接口成员

public interface IMyInterface {        void DoSomething();        void DoSomethingElse();    }    class MainClass:IMyInterface    {        public static void Main (string[] args)        {            Console.WriteLine ("Hello World!");        }        public virtual void DoSomething ()        {            System.Console.WriteLine ("DoSomething");        }        public void DoSomethingElse ()        {            System.Console.WriteLine ("DoSomethingElse");        }    }    abstract class AClass : IMyInterface    {        abstract public void DoSomething ();        abstract public void DoSomethingElse ();    }
0 0
原创粉丝点击