精华内容
下载资源
问答
  • C#基类和派生类

    2016-06-20 09:38:00
    C#基类和派生类 1.基类和派生类的一些基本概念 class B : A{} A是基类,B是派生类. 一个类最多只允许从一个类中派生. class C : B{} B还可以充当C的派生类 继承总是隐式为public的,System.Object是...
    C#基类和派生类
    1.基类和派生类的一些基本概念
    class B : A{}
    A是基类,B是派生类.
    一个类最多只允许从一个类中派生.
    class C : B{}
    B还可以充当C的派生类
    继承总是隐式为public的,System.Object是所有类的根
    编译器会把你的类悄悄的编译成 class A : System.Object{}
    2.调用基类的构造函数        
    class B : A
    {
    public B(string sqlstr) : base(sqlstr)
    {}
    }
    3基类派生类对象之间的关系
    class A{}
    class B : A {}
    class C: A {}
    B b = new B();
    C c = b;  //这样写是错误地,因为类型不同
    A a = b; //这样写是正确的,但是一定要注意:
    这样做有一个明显的限制 a 对象只能访问基类中的成员不能访问派生类中的成员
    这就是为什么C#完全面向对象的原因,因为C#中所有的东西都继承自System.Object,任何东西都能赋给一个object变量
    4.方法的隐藏
    如果一个基类有n个方法和n个派生类,这n个派生类里又分别有n个方法.你想过会出现什么问题吗?对!就是会遇到 完全一样签名的方法(方法名\参数的数量\类型完全一样) 如果出现这样的情况,在编译过程中将收到一个警告,不要惊慌,仅仅是警告而已,不会影响编译的过程.

    但是你应该认真的对待这个警告,如果派生类的一个对象将调用基类的一个方法,然而这个方法又在这个派生类里有相同签名的方法!那编译器该怎么办?
    我可以负责任的告诉你(呵呵):
    对象调用的是派生类里的方法,
    这种现象在微软官方叫 方法的隐藏,

    如果你不想看到那个警告,可以在派生类中与基类同签名的方法前面加个new关键字,告诉编译器:我会为我造成的结果负责,不要警告我!注意这个关键字只是起个屏蔽警告的作用,你明白我的意思吗?(派生类的对象照样还是不能调用基类中同签名的方法,呵呵,还是再补一句吧,)
    5.方法的覆盖
    先看个例子:

    class nvren
    ...{
    public virtual string leixing()
    ...{return "这是个女人";}
    }
    class meinv : nvren
    ...{
    public override string leixing()
    ...{return "这是个美女";}
    }
    class weizhi : nvren
    ...{
    ...............//这里并没有任何覆盖原方法的方法
    }
    nvren a = new nvren();
    meinv b = new meinv();
    weizhi c = new weizhi();
    Console.WriteLine(a.leixing());
    Console.WriteLine(b.leixing());
    Console.WriteLine(c.leixing());

    程序很简单(原谅我用了中文拼音,我知道你看了很多国外的程序,肯定腻了)
    当调用第三个WriteLine时,程序输出了"这是个女人",现在不用我解释你也该明白了.
    这种同一个语句调用不同方法的现象称为多态性(面向对象的一大特性啊!)
    使用virtul和override一定要注意:
    (1)两个方法必签名相同!
    (2)两个方法均不能是private方法,且必须有相同的可访问性!
    (3)不要试图override没有virtual的方法!
    (4)不要试图不用override就覆盖基类的virtual方法(那就成了方法的隐藏了)!

    在给你个小窍门:
    一个override方法将隐式的成为virtual方法,他本身可在未来的一个派生类里被覆盖(点到为止,不要让我写例子给你)

    这篇小文到次也该结束了,但我还想再提两句
    1.派生类可以访问一个基类的protected成员
    2.建议保持字段为private. ( 因为面向对象强调封装,而public破坏了封装性,private也会在某些时候破坏封装性,你应该知道是哪些时候.呵呵)

    转载于:https://my.oschina.net/u/158055/blog/694573

    展开全文
  • C# 基类和派生类

    千次阅读 2013-10-04 14:51:37
    基类和派生类的一些基本概念     class B : A{}   A 是基类 ,B 是派生类 .   一个类最多只允许从一个类中派生 .   class C : B{}   B 还可以充当 C 的派生类     继承总是隐式为 public 的 ,System....

    C#基类和派生类(转)

    1.基类和派生类的一些基本概念

    class B : A{}

    A是基类,B是派生类.

    一个类最多只允许从一个类中派生.

    class C : B{}

    B还可以充当C的派生类

    继承总是隐式为public,System.Object是所有类的根

    编译器会把你的类悄悄的编译成 class A : System.Object{}

    2.调用基类的构造函数        

    class B : A
    {
    public B(string sqlstr) : base(sqlstr)
    {}
    }

    3基类派生类对象之间的关系

    class A{}
    class B : A {}
    class C: A {}
    B b = new B();
    C c = b;  //
    这样写是错误地,因为类型不同
    A a = b; //
    这样写是正确的,但是一定要注意:

    这样做有一个明显的限制 a 对象只能访问基类中的成员不能访问派生类中的成员
    这就是为什么C#完全面向对象的原因,因为C#中所有的东西都继承自System.Object,任何东西都能赋给一个object变量

    4.方法的隐藏

    如果一个基类有n个方法和n个派生类,n个派生类里又分别有n个方法.你想过会出现什么问题吗?!就是会遇到完全一样签名的方法(方法名\参数的数量\类型完全一样)如果出现这样的情况,在编译过程中将收到一个警告,不要惊慌,仅仅是警告而已,不会影响编译的过程.

    但是你应该认真的对待这个警告,如果派生类的一个对象将调用基类的一个方法,然而这个方法又在这个派生类里有相同签名的方法!那编译器该怎么办?
    我可以负责任的告诉你(呵呵):
    对象调用的是派生类里的方法,
    这种现象在微软官方叫方法的隐藏,

    如果你不想看到那个警告,可以在派生类中与基类同签名的方法前面加个new关键字,告诉编译器:我会为我造成的结果负责,不要警告我!注意这个关键字只是起个屏蔽警告的作用,你明白我的意思吗?(派生类的对象照样还是不能调用基类中同签名的方法,呵呵,还是再补一句吧,)

    5.方法的覆盖

    先看个例子:

    class nvren
    {
    public virtual string leixing()
    {
    return "这是个女人";}
    }
    class meinv : nvren
    {
    public override string leixing()
    {
    return "这是个美女";}
    }
    class weizhi : nvren
    {
    ...............
    //这里并没有任何覆盖原方法的方法
    }
    nvren a = 
    new nvren();
    meinv b = 
    new meinv();
    weizhi c = 
    new weizhi();
    Console.WriteLine(a.leixing());
    Console.WriteLine(b.leixing());
    Console.WriteLine(c.leixing());

    程序很简单(原谅我用了中文拼音,我知道你看了很多国外的程序,肯定腻了)
    当调用第三个WriteLine,程序输出了"这是个女人",现在不用我解释你也该明白了.
    这种同一个语句调用不同方法的现象称为多态性(面向对象的一大特性啊!)

    使用virtuloverride一定要注意:
    (1)
    两个方法必签名相同!
    (2)
    两个方法均不能是private方法,且必须有相同的可访问性!
    (3)
    不要试图override没有virtual的方法!
    (4)
    不要试图不用override就覆盖基类的virtual方法(那就成了方法的隐藏了)!

    在给你个小窍门:
    一个override方法将隐式的成为virtual方法,他本身可在未来的一个派生类里被覆盖(点到为止,不要让我写例子给你)

     

    这篇小文到次也该结束了,但我还想再提两句
    1.
    派生类可以访问一个基类的protected成员
    2.
    建议保持字段为private. ( 因为面向对象强调封装,public破坏了封装性,private也会在某些时候破坏封装性,你应该知道是哪些时候.呵呵)

     

    展开全文
  • C#基类和派生类_161103

    千次阅读 2016-11-03 11:07:42
    派生类应当那个被看做是基类所具有的特性功能的继承扩展,而不是简单的派生类大于基类派生类不能选择性的继承基类的方法属性,必须继承基类的所有特性方法派生类可以在继承基类的基础上自由定义自己的特性...

    C#不支持私有继承

    • 派生类应当那个被看做是基类所具有的特性和功能的继承和扩展,而不是简单的派生类大于基类
    • 派生类不能选择性的继承基类的方法和属性,必须继承基类的所有特性和方法
    • 派生类可以在继承基类的基础上自由定义自己的特性
    • 基类的构造方法和析构方法不能够被继承,除此之外的所有成员都可以被继承
    • 基类成员的访问方式不影响他们成为派生类的成员
    • 派生类中继承的基类成员与基类中的成员只是相同,不是同一个成员

    来个栗子

     

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;

    namespace Ch06Ex01
    {
        public class Person
        {
            protected string name;
            protected int age;
            public Person(string name, int age)
            {
                this.name = name;
                this.age = age;

            }
            public void ShowPersonInfo()
            {
                Console.Write("name :{0}\t age:{1}\t", name, age);
            }
        }

        public class Student : Person
        {
            private string studentID;
            public Student(string studentID, string name, int age) : base(name, age)
            {
                this.studentID = studentID;
            }

            public void ShowStudentInfo()
            {
                Console.Write("studentID:{0}", studentID);
            }
        }
        class Program
        {
            static void Main(string[] args)
            {
                Student student = new Student("12345", "Jack", 23);
                student.ShowPersonInfo();
                student.ShowStudentInfo();
             
               
            }
        }
    }

     

     

    展开全文
  • using System; namespace Test { class MyBase { public MyBase() { Console.WriteLine("基类对象被创建"); } ~MyBase() { Console....
    using System;
    namespace Test
    {
        class MyBase
        {
            public MyBase()
            {
                Console.WriteLine("基类对象被创建");
            }
            ~MyBase()
            {
              
                Console.WriteLine("基类对象被销毁");
              
            }
        }
        class SubClass : MyBase
        {
            public SubClass()
            {
                Console.WriteLine("子类对象被创建");
            }
            ~SubClass()
            {
                        Console.WriteLine("子类对象被销毁");
            }
        }
        class Program
        {
            static void Main(string[] args)
            {
                SubClass sc = new SubClass();
               Console.ReadLine();
              
            }
        }
    }
    
    
    //创建(销毁)子类对象时,基类构造(析构)方法被子类自动调用
    
    //创建或销毁子类对象,都跟父亲有关系 
    //创建:先运行父亲构造方法,再儿子;销毁的时候反之!

     

    展开全文
  • C#基类派生类

    千次阅读 2017-11-14 11:23:26
    看了c#的教程,也上网络上搜索基类派生类的概念,一直没有一个很明确的定义.弄得偶一直很迷糊,现在搜索到c++的教程里倒是有比较明确的说明,特意贴在这里,帮助自己理解. 继承机制提供了无限重复利用程序资源的一种...
  • using System; namespace Test { class TV { private string mode; public void Show() ...//基类对象引用子类对象的实例,即:子类实例可以赋值给基类对象变量,但只能执行基类定义的那些成员!  
  • 基类和派生类 当创建一个类时,我们不需要完全重新编写新的数据成员和成员函数,只需要设计一个新的类,继承了已有的类的成员即可 这个已有的类被称为基类,这个新的类被称为派生类 继承的思想实现...
  • 基类和派生类

    2016-11-17 17:34:46
    看了c#的教程,也上网络上搜索基类派生类的概念,一直没有一个很明确的定义.弄得偶一直很迷糊,现在搜索到c++的教程里倒是有比较明确的说明,特意贴在这里,帮助自己理解. 继承机制提供了无限重复利用程序资源的一种...
  • C# 基类 派生类 方法隐藏 方法重写

    千次阅读 2014-08-30 23:03:02
    最近重新学习C#中基础,找到了隐藏基类方法重写基类方法的一点区别,二者都是在派生类中定义了与基类中相同的方法,相同点派生类对象将执行各自的派生类中的方法,不同点,在向上转型后,重写基类方法的调用的是...
  • 派生类中,可以使用new关键字屏蔽(覆盖)基类的同签名的方法(注意,不加new不报错,只是警告) 如果使用基类的引用(子类的的对象使用了基类的引用)尝试调用使用new屏蔽的方法时,会调用基类方法,而...
  • 继承是面向对象程序设计中最重要的概念之一。继承允许我们根据一个类来定义另一个类来定义一个类...这个已有的类被称为的基类,这个新的类被称为派生类。 继承的思想实现了 属于(IS-A) 关系。例如,哺乳动物 属于(I
  • 12.2.1 基类和派生类

    2009-05-18 19:33:00
    class DerivedClass : BaseClass{......} 派生类将从基类继承。 在C#中,一个类最多只允许从一个类中派生;不允许从两个或更多的类中派生。然而,除非将派生类声明为sealed,否则可以创建更多的派生类。 在C#中,...
  • 一、继承的应用 (一)基类和派生类 访问修饰符 class 派生类名称:基类名称 C#不支持多重继承,不允许从两个或更多的类中派生新类。派生类可以获取基类的所有非私有数据和行为,以及派生类为自己定义的所有其他数据...
  • 继承 继承是面向对象程序设计中最重要的概念之一。继承允许我们根据一个类来定义另一个类,这使得创建和维护应用程序变动更容易。...基类和派生类 子类只能有一个直接父类,但一个父类可以有多个直接子类。继承...
  • 基类派生类

    2019-09-24 21:23:58
    看了c#的教程,也上网络上搜索基类派生类的概念,一直没有一个很明确的定义.弄得偶一直很迷糊,现在搜索到c++的教程里倒是有比较明确的说明,特意贴在这里,帮助自己理解. 继承机制提供了无限重复利用程序资源的一种...
  • C# 派生继承(派生类基类) using System; using System.Collections.Generic; using System.Text; namespace 继承 { class Program { static void Main(string[] args) { Mammal mammal = new Mammal(); ...
  • 各位专家好!设有一个基类BaseMan,派生了多种派生类BatMan、SuperMan、SpiderMan……示例如下...C#基类对象,如何知道是那个派生类的》,但水平有限,不是很理解……同时也希望了解能否不通过指针来实现以上需求?
  • 这篇东西主要是为了了解C#中使用派生类更改基类的数据行为,C#提供两种方法:一是使用new的派生成员替换基成员;二是重写虚拟的基成员(OverrideVirtual)。还有介绍实现了类的接口强制转换为接口的时候,转换后...
  • 测试 using  System; namespace  day327 {   class   Program  {   static   void  Main( string [] args)  {   Console .WriteLine( " Hello World! " );   CPoint  cp =  new   CPoint ( 3 , 4...
  • 主要介绍了结合.net框架在C#派生类中触发基类事件及实现接口事件,示例的事件编程中包括接口类的继承等面向对象的基础知识,需要的朋友可以参考下
  • 我们知道C#中通过继承可以使一个具有公共数据方法的基类被广泛应用从而减少代码量,这样派生类会具有基类中所有成员(除构造器等),我们理所当然可以通过派生类实例来使用基类的成员。那么当基类成员被protected...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,917
精华内容 766
关键字:

c#基类和派生类

c# 订阅