码迷,mamicode.com
首页 > Windows程序 > 详细

飘过来学C#系列(2)之------继承

时间:2014-10-16 20:38:53      阅读:315      评论:0      收藏:0      [点我收藏+]

标签:blog   使用   ar   sp   div   on   log   代码   ad   

2.1 实现继承和接口继承

实现继承:一个类型派生于一个基类型,它用于基类型的所有成员字段和函数.

 class BaseClass
    {
        public string UserName = "C#";
        public static string GetUserName()
        {
            return "";
        }
    }
    class ImpleteClass:BaseClass
    {
        public string PrintName()
        {
            return GetUserName();
            //return UserName
        }
        
    } 

 ImpleteClass类继承BaseClass,就可以用基类中所有的成员字段如UserName,GetUserName();

接口继承 表示一个类型只继承了函数的签名,没有继承任何实现代码.在需要制定该类型具有某些可用的特性时,最好

使用这种类型的继承.

2.2 多重继承

C#不支持多重实现继承.但C#允许类型派生自多个接口---多重接口继承.这说明

C#类可以派生自另一个类和任意多个接口.

2.3 Virtual关键字

virtual 关键字用于在基类中修饰方法。virtual的使用会有几种情况:

1, 如果方法不是virtual的,编译器就使用声明的类对应的类型,也就是说,不是virtual的,在编译时候,就定了。比如下面的例子:子类的方法都没有执行,执行的全部都是父类的方法。运行的结果是
father
boy
girl

public class ClassFather
    {
        public string s1;
        public void VirFun()
        {
            Console.WriteLine(s1); 
        }

    }
    public class ClassBoy : ClassFather
    {
        public new void VirFun()
        { 
            base.VirFun(); 
        }

    }
    public class ClassGirl : ClassFather
    {
        public new void VirFun()
        {
            base.VirFun();
            Console.WriteLine(s1);
        }
    }

    public class Test
    {
        public static void Main()
        {
            ClassFather a = new ClassFather();
            a.s1 = "father";
            a.VirFun();
            ClassFather b = new ClassBoy();
            b.s1 = "boy";
            b.VirFun();
            ClassFather c = new ClassGirl();
            c.s1 = "girl";
            c.VirFun();
            Console.ReadKey();
        }

    } 

 2, 如果方法是Virtual的,然后子类使用了override, 编译器就生产代码。然后,在运行的时候,进行检测,看对象属于哪个类,然后调用这个类的方法。运行的结果是
father
boy
girl

girl

 public class ClassFather
    {
        public string s1;
        public virtual void VirFun()
        {
            Console.WriteLine(s1); 
        }

    }
    public class ClassBoy : ClassFather
    {
        public override void VirFun()
        { 
            base.VirFun(); 
        }

    }
    public class ClassGirl : ClassFather
    {
        public override void VirFun()
        {
            base.VirFun();
            Console.WriteLine(s1);
        }
    }

    public class Test
    {
        public static void Main()
        {
            ClassFather a = new ClassFather();
            a.s1 = "father";
            a.VirFun();
            ClassFather b = new ClassBoy();
            b.s1 = "boy";
            b.VirFun();
            ClassFather c = new ClassGirl();
            c.s1 = "girl";
            c.VirFun();
            Console.ReadKey();
        }

    } 

 3,如果一个父类的方法是virtual,子类不是用override,而是用new来覆盖了,那么运行子类的时候,还是执行声明的类的方法。比如下面的例子中,girl类对象就是。

father
boy
girl

public class ClassFather
    {
        public string s1;
        public virtual void VirFun()
        {
            Console.WriteLine(s1); 
        }
    }
    public class ClassBoy : ClassFather
    {
        public new void VirFun()
        { 
            base.VirFun(); 
        }
    }
    public class ClassGirl : ClassFather
    {
        public new void VirFun()
        {
            base.VirFun();
            Console.WriteLine(s1);
        }
    }

    public class Test
    {
        public static void Main()
        {
            ClassFather a = new ClassFather();
            a.s1 = "father";
            a.VirFun();
            ClassFather b = new ClassBoy();
            b.s1 = "boy";
            b.VirFun();
            ClassFather c = new ClassGirl();
            c.s1 = "girl";
            c.VirFun();
            Console.ReadKey();
        }

    } 

  

 

 

飘过来学C#系列(2)之------继承

标签:blog   使用   ar   sp   div   on   log   代码   ad   

原文地址:http://www.cnblogs.com/piaoguo/p/4029267.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!