zoukankan      html  css  js  c++  java
  • C#继承

    #region Example 1
    public class A
    {
        public int num = 1;
        public void Fun() { }

        protected int num2 = 2;
        protected void Fun2() { }

        int num3 = 3;  //私有
        void Fun3() { }
    }
    public class B : A
    {
        //这里无法使用num、num2、Fun()和Fun2()
        private void FunB()  //子类函数里调用父类属性和方法
        {
            num++;
            num2++;
            Fun();
            Fun2();
        }
    }
    private void OutSizeFun()  //类外不能使用protected属性和方法
    {
        B b = new B();
        b.num = 3;
        b.Fun();
        //这里无法使用b.num2和b.Fun2()
    }
    #endregion
       
    #region Example 2
    public class A
    {
        public int a_num = 1;
        public void a_Fun() { }
        public virtual void Fun()  //虚函数
        {
            Console.Write("A_Fun");
        }
    }
    public class B : A
    {
        public int b_num = 1;
        public void b_Fun() { }
        public override void Fun()
        {
            Console.Write("B_Fun");
        }
    }
    static void Main(string[] args)
    {
        A a = new A();
      a.a_Fun();
      a.a_num++;
      a.Fun();  //A_Fun
      
      A a2 = new B();
      a2.a_Fun();
      a2.a_num++;
      a2.Fun(); //B_Fun,A类函数被重载
      
      B b = new B();
      b.a_Fun();
      b.a_num++;
      b.b_Fun();
      b.b_num++;
      b.Fun();  //B_Fun
    }
    #endregion

    #region Example 3
    //Error 1
    public class A
    {
        public abstract void Fun() { }  //错误。抽象方法必须存在于抽象类中
    }
    //Error 2
    public abstract class A
    {
        public abstract void Fun() { }  //错误。抽象方法无法声明主体(不能有函数体)
    }
    //Error 3
    public abstract class A
    {
        public abstract void Fun();
    }
    public class B : A  //错误。没有实现基类的抽象方法
    {
      
    }
    //Error 4
    public class A
    {
        public virtual void Fun();  //错误。虚函数必须声明主体(必须有函数体)
    }
    //Correct 1
     public class A
    {
        public virtual void Fun() { }
    }
    public class B : A  //虚函数不一定要实现重载
    {
      
    }
    #endregion

    #region 多态

    参考文章http://www.cnblogs.com/patrickchen/archive/2008/10/30/1323115.html

    //SuperClass refSuper = new SubObjClass();  //父类引用指向子类对象
    //这样的写法主要是为了实现多态,即父类应该存在一个虚方法,可以让子类重载(override)。
    //在定义父类时未能及时细化子类,也可以使子类在未完成之前先使用父类的virtual(虚)方法,完成之后不需要再修改程序

    public class AnimalVoice
    {
        public AnimalVoice()
        { }
        public virtual void MakeVoice()
        {
            Console.WriteLine("Make a Animal Voice");
        }
    }
    public class DogVoice : AnimalVoice
    {
        public DogVoice()
        { }
        public override void MakeVoice()
        {
            Console.WriteLine("Make a Dog Voice");
        }
    }
    public class CatVoice : AnimalVoice
    {
        public CatVoice()
        { }
        //"Makevoice" hasn't been finished, or doesn't want to be used
    }

    static void Main(string[] args)
    {
        AnimalVoice animalVoice = new AnimalVoice();
        animalVoice.MakeVoice();  //Make a Animal Voice
        AnimalVoice dogVoice = new DogVoice();
        dogVoice.MakeVoice();  //Make a Dog Voice
        AnimalVoice catVoice = new CatVoice();
        catVoice.MakeVoice();  //Make a Animal Voice
        Console.Read();
    }

    #endregion

    对抽象编程:接口和抽象类
    参考文章http://www.cnblogs.com/anytao/archive/2007/04/12/must_net_02.html

    当一个类继承某个接口时,它不仅要实现该接口定义的所有方法,还要实现该接口从其他接口中继承的所有方法。

    抽象类提供多个派生类共享基类的公共定义,它既可以提供抽象方法,也可以提供非抽象方法。

    如果派生类没有实现所有的抽象方法,则该派生类也必须声明为抽象类。

    接口支持多继承;抽象类不能实现多继承。

    接口是一组行为规范;抽象类是一个不完全的类,着重族的概念。

    接口只包含方法、属性、索引器、事件的签名,但不能定义字段和包含实现的方法;抽象类可以定义字段、属性、包含有实现的方法。

    抽象类应主要用于关系密切的对象,而接口最适合为不相关的类提供通用功能。为外部提供调用或功能需要扩充时优先使用接口。

  • 相关阅读:
    判断一个key 是否在map中存在
    time date 基础操作
    handsontable插件HOOK事件
    删除list中指定值的元素
    handsontable的单元格操作方法
    sql求和涉及到null值
    Handsontable Read-only cells
    判断包含字符String.contains
    Wireshark
    ECMAScript 6
  • 原文地址:https://www.cnblogs.com/vipcjob/p/1534559.html
Copyright © 2011-2022 走看看