.NET基础 (06)面向对象的实现

面向对象的实现
1 C#中类可以有多个父类、可以实现多个接口吗
2 简述C#中重写、重载和隐藏的概念
3 为什么在构造方法中调用虚方法会导致问题
4 在C#中如何声明一个类不能被继承

 

面向对象的实现

1 C#中类可以有多个父类、可以实现多个接口吗

 C#中最多只能有一个父类,但可以实现多个接口。


2 简述C#中重写、重载和隐藏的概念

 重写是指用Override关键字重新实现基类中的虚方法,在运行的过程中,无论通过那个类型的引用,真正类型的方法将被调用。

隐藏是指用new关键字重新实现基类中的方法,在运行的过程中通过引用的类型判断应该调用哪个类型的方法。

重载是指多个方法共享同一个名字并且拥有相同的返回值,但是却可以拥有不同的参数列表。


3 为什么在构造方法中调用虚方法会导致问题

 构造方法中调用虚方法将导致运行时的错误。这是因为构造方法被调用时,子类的构造方法还未被调用,但是根据实际对象的类型,基类调用的虚方法是定义在子类中的方法,这就意味着调用了一个未完成构造的类型对象的方法,不可预计的错误将可能发生。

构造方法示例如下:

    class Constructor
    {
        static void Main(string[] args)
        {
            //构造了一个底层类型
            C c = new C();
            Console.Read();
        }
    }
    public class Ref
    {
        public Ref(string s)
        {
            Console.WriteLine(s);
        }
    }
    public class Base
    {
        public Ref basestring = new Ref("Base初始化表达式");
        public Base()
        {
            Console.WriteLine("Base构造方法");
        }
    }
    public class A:Base
    {
        public Ref astring = new Ref("A初始化表达式");
        public A():base()
        {
            Console.WriteLine("A构造方法");
        }
    }
    public class B : A
    {
        public Ref bstring = new Ref("B初始化表达式");
        public B(): base()
        {
            Console.WriteLine("B构造方法");
        }
    }
    public class C : B
    {
        public Ref cstring = new Ref("C初始化表达式");
        public C(): base()
        {
            Console.WriteLine("C构造方法");
        }
    }

 

输出结果:

C初始化表达式
B初始化表达式
A初始化表达式
Base初始化表达式
Base构造方法
A构造方法
B构造方法
C构造方法


4 在C#中如何声明一个类不能被继承

C#通过关键字sealed可以申明一个类型不可被继承,设计中应该为所有不被作为基类的类型添加sealed关键字,以避免各种来自继承的易产生的错误。

String类就是sealed的

 

 

转载请注明出处:

作者:JesseLZJ
出处:http://jesselzj.cnblogs.com

posted @ 2015-09-08 20:38  JesseLZJ  阅读(269)  评论(0编辑  收藏  举报