C#继承

1、C#在继承方面支持和不支持的功能。

  • 单重继承: 表示一个类可以派生自一个基类。 C#就采用这种继承。
  • 多重继承: 多重继承允许一个类派生自多个类。 C#不支持类的多重继承, 但允许 接口的多重继承。
  • 多层继承: 多层继承允许继承有更大的层次结构。 类B派生自类A, 类C又派生自 类B。 其中, 类B也称为中间基类, C#支持它, 也很常用。
  • 接口继承: 定义了接口的继承。 这里允许多重继承。

2、继承和C#的某些特定问题

2.1、C#不支持多重继承

  C#的设计人员决 定不支持类的多重继承, 因为支持多重继承会增加复杂性, 还会带来一些开销。 而C#又允许类型派生自多个接口。 一个类型可以实现多个接口。 这说明, C#类可以 派生自另一个类和任意多个接口。 更准确地说, 因为System.Object是一个公共的基类, 所 以每个C#类(除了Object类之外) 都有一个基类, 还可以有任意多个基接口。

2.2 虚方法和抽象方法

1、虚方法

把一个基类方法声明为virtual为虚方法,虚方法需声明主体, 就可以在任何派生类中重写该方法,重写方法需要添加关键字“override”,如下所示:

  public  class Animal
    {
        public virtual string Sound()
        {
            return "默认声音";
        }
    }
   public class Cat : Animal
    {
    //可不重写方法 }

   当派生类没有重新虚方法时,当调用改虚方法,会自动执行基类中的虚方法。重写虚方法后如需执行基类中的对应虚方法使用“base.方法名”即可。

2、抽象方法

 把一个基类方法声明为abstract就是抽象方法, 抽象方法必须声明在抽象类(类需要声明为abstract类),抽像方法不能声明主体,派生类必须使用“override”进行重写、基类方法无主体不能进行访问。如下所示:

  public abstract class Animal
    {
        public abstract string Sound()
    }

    public class Dog: Animal
    {
        public override string Sound()
        {
            return "汪...汪...";
        }
    }
public class Cat : Animal { public override string Sound() { return "喵...喵..."; //必须重写方法 } }

总结:

  派生类可访问基类中所有public属性、字段及方法;不能访问基类中私有字段属性及方法。访问权限使用关键字进行控制,如有兴趣可查询C#关键子相关资料。

posted @ 2020-06-04 18:01  追逐、者  阅读(195)  评论(0编辑  收藏  举报