C#学习之接口和抽象类

坚持 成长 每日一篇

前言

一,接口和抽象类的相同点
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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值