浅谈C#继承

发表于:2011-12-22 09:44

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:佳园    来源:51Testing软件测试网采编

  本文意在巩固基础知识,并不是对其进行深入剖析,如若对各位高手没有什么作用,请绕过。

  本文为原创文,所有示例均是博主测试过的,欢迎大家批评指正。

  继承、封装和多态是面向对象编程的重要特性。

  其成员被继承的类叫基类也称父类,继承其成员的类叫派生类也称子类。

  派生类隐式获得基类的除构造函数和析构函数以外的所有成员。

  派生类只能有一个直接基类,所以C#并不支持多重继承,但一个基类可以有多个直接派生类。

  继承是可以传递的。即:

  如果 ClassB 派生出 ClassC,ClassA 派生出 ClassB,则 ClassC 会继承 ClassB 和 ClassA 中声明的成员。

class A
    {
        public void Sum(int i,int j)
        {
            int sum = i + j;
            Console.WriteLine("I am A ,my sum ={0}",sum);
        }
    }
    class B : A
    {
        public void Minus(int i,int j)
        {
            int minus = i - j;
            Console.WriteLine("I am B ,my minus ={0}", minus);


            this.Sum(3, 4);        }

    }
    class InheritanceTest1
    {
        static void Main(string[] args)
        {
            B b = new B();
            b.Minus(3, 4);
            Console.Read();
        }
    }

  试想一下,当基类Sum()方法是私有时,派生类还会继承该方法吗?

  经过本人测试,没有在B类找到该方法,那么是不是它就没有被继承呢?其实不是的,私有成员其实已经被继承了,

  但是它们却不可以被访问,因为私有成员只能被声明它们的类或结构体中才可访问,所以看上去像是没有被继承。

  如果我们想降低访问基本,我们可以把基类Sum()方法定义为protected。

  能够阻止某个类被其他类继承吗?

  答案是可以的,C#提供了一个sealed 修饰符,此修饰符会阻止其他类从该类继承。

sealed class A
    {
        int test;
        public void Sum(int i,int j)
        {
            int sum = i + j;
            Console.WriteLine("I am A ,my sum ={0}",sum);
        }
    }
    class B : A
    {
        public void Minus(int i,int j)
        {
            int minus = i - j;
            Console.WriteLine("I am B ,my minus ={0}", minus);
            this.Sum(3, 4);       //编译器会报错    
        }
     }

  前面说过,派生类隐式获得基类的除构造函数和析构函数以外的所有成员。

31/3123>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号