C#构造函数的继承和引用方法 override

大家都知道C#构造函数主要用来设置类中属性的初始值,但经常会忽视类的构造方法也可以象方法一样引用调用父类中的构造方法或本身的其他构造方法。往往因此写了很多重复代码。下面的代码介绍了类的构造方法的几种用法。

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

namespace practise1
{
    class Program
    {
        static void Main(string[] args)
        {
            TestCon con = new TestCon();
            Console.WriteLine(con.ToString());
            TestA testA1 = new TestA();
            Console.WriteLine("测试类A无参数构造方法");
            Console.WriteLine(testA1.ToString());
            Console.WriteLine();

            TestA testA2 = new TestA("Set First Param");
            Console.WriteLine("测试类A一个参数构造方法");
            Console.WriteLine(testA2.ToString());
            Console.WriteLine();

            TestB testB1 = new TestB();
            Console.WriteLine("测试类B无参数构造方法");
            Console.WriteLine(testB1.ToString());
            Console.WriteLine();

            TestB testB2 = new TestB("Set First Param");
            Console.WriteLine("测试类B一个参数构造方法");
            Console.WriteLine(testB2.ToString());
            Console.WriteLine();

            TestB testB3 = new TestB("Set First Param", "Set Second Param");
            Console.WriteLine("测试类B两个参数构造方法");
            Console.WriteLine(testB3.ToString());
            Console.WriteLine();

            TestB testB4 = new TestB("Set First Param", "Set Second Param", "Set Third Param");
            Console.WriteLine("测试类B三个参数构造方法");
            Console.WriteLine(testB4.ToString());
            Console.WriteLine();

            Console.ReadLine();
        }

        class TestCon
        {
            private string _a = "_a1";
            private string _b = "_b2";
        }

        /// <summary>
        /// 测试类A
        /// </summary>
        class TestA
        {
            protected string _testValueA;

            /// <summary>
            /// 无参数构造方法
            /// </summary>
            public TestA() : this("Set First Param")
            {

            }

            /// <summary>
            /// 一个参数构造方法
            /// </summary>
            /// <param name="value"></param>
            public TestA(string value)
            {
                _testValueA = value;
            }

            /// <summary>
            /// 重新ToString方法
            /// </summary>
            /// <returns></returns>
            public override string ToString()
            {
                return this._testValueA;
            }
        }

        /// <summary>
        /// 测试类TestB,从TestA类中继承
        /// </summary>
        class TestB : TestA
        {
            protected string _testValueB;
            protected string _testValueC;
            /// <summary>
            /// 调用父类中的构造方法
            /// </summary>
            public TestB() : base()
            {
                this._testValueB = "Set Second Param";
                this._testValueC = "Set Third Param";
            }
            /// <summary>
            /// 调用父类中的构造方法
            /// </summary>
            /// <param name="valueA"></param>
            public TestB(string valueA)
            : base(valueA)
            {
                this._testValueB = "Set Second Param";
                this._testValueC = "Set Third Param";
            }

            /// <summary>
            /// 调用其他构造方法
            /// </summary>
            /// <param name="valueA"></param>
            /// <param name="valueB"></param>
            public TestB(string valueA, string valueB)
            : this(valueA, valueB, "Set Third Param")
            {

            }
            /// <summary>
            /// 三个参数的构造方法
            /// </summary>
            /// <param name="valueA"></param>
            /// <param name="valueB"></param>
            /// <param name="valueC"></param>
            public TestB(string valueA, string valueB, string valueC)
            {
                this._testValueA = valueA;
                this._testValueB = valueB;
                this._testValueC = valueC;
            }

            /// <summary>
            /// 重新ToString方法
            /// </summary>
            /// <returns></returns>
            public override string ToString()
            {
                return this._testValueA + "\n" + this._testValueB + "\n" + this._testValueC;
            }
        }
    }
}
时间: 2024-10-25 13:46:16

C#构造函数的继承和引用方法 override的相关文章

JavaScript非构造函数的继承( object()方法、浅拷贝与深拷贝 )

一.什么是"非构造函数"的继承? 比如,现在有一个对象,叫做"中国人". var Chinese = { nation:'中国' }; 还有一个对象,叫做"程序员". var Programmer ={ career:'程序员' } 要怎样才能让"程序员"去继承"中国人"? 这里两个对象都是普通对象,而非构造函数,无法用构造函数方法实现"继承". 二.object()方法 functio

javascript之构造函数的继承(引用网络)

这个系列的第一部分,主要介绍了如何"封装"数据和方法,以及如何从原型对象生成实例. 今天要介绍的是,对象之间的"继承"的五种方法. 比如,现在有一个"动物"对象的构造函数. function Animal(){ this.species = "动物"; } 还有一个"猫"对象的构造函数. function Cat(name,color){ this.name = name; this.color = col

C++构造函数 &amp; 拷贝构造函数 &amp; 派生类的构造函数 &amp; 虚继承的构造函数

构造函数 ,是一种特殊的方法 .主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中 .特别的一个类可以有多个构造函数 ,可根据其参数个数的不同或参数类型的不同来区分它们 即构造函数的重载.(摘自百度百科构造函数). 一.最基本的构造函数 1 class Base 2 { 3 public: 4 Base(int var) : m_Var(var) 5 { 6 } 7 private: 8 int m_Var; 9 }; 以上构造函数的执行过程:

javascript中类式继承和原型式继承的实现方法和区别

在所有面向对象的编程中,继承是一个重要的话题.一般说来,在设计类的时候,我们希望能减少重复性的代码,并且尽量弱化对象间的耦合(让一个类继承另一个类可能会导致二者产生强耦合).关于“解耦”是程序设计中另一个重要的话题,本篇重点来看看在javascript如何实现继承. 其它的面向对象程序设计语言都是通过关键字来解决继承的问题(比如extend或inherit等方式).但是javascript中并没有定义这种实现的机制,如果一个类需要继承另一个类,这个继承过程需要程序员自己通过编码来实现. 一.类式

JS继承,原型继承,构造函数的继承,非构造函数&quot;的继承

a.原型继承 一.new运算符的缺点 用构造函数生成实例对象,有一个缺点,那就是无法共享属性和方法.比如,在DOG对象的构造函数中,设置一个实例对象的共有属性species. function DOG(name){ this.name = name; this.species = '犬科'; } 然后,生成两个实例对象: var dogA = new DOG('大毛'); var dogB = new DOG('二毛'); 这两个对象的species属性是独立的,修改其中一个,不会影响到另一个.

JavaScript构造函数+原型创建对象,原型链+借用构造函数模式继承父类练习

虽然经常说是做前端开发的,但常常使用的技术反而是JQuery比较多一点.在JavaScript的使用上相对而言少些.尤其是在创建对象使用原型链继承上面,在项目开发中很少用到.所以今天做个demo练习一下,以后忘记了也可以照搬一下. 说明一下: 1. Demo中使用的是构造函数+原型模式创建的对象.构造函数中存储对象实例使用的属性,原型模式增加实例使用的方法. 2. Demo中的继承分为两个方面.一个是属性继承,使用的是借用构造函数模式 call()方法.另一个是方法继承,这个就是使用原型方式继承

JavaScript中继承的主要方法

1. 原型链继承 子类使用基类对象重写prototype function SuperType(){ this.property = true; } SuperType.prototype.getSuperValue = function(){ return this.property; }; function SubType(){ this.subproperty = false; } //inherit from SuperType SubType.prototype = new Super

ES5和ES6中对于继承的实现方法

在ES5继承的实现非常有趣的,由于没有传统面向对象类的概念,Javascript利用原型链的特性来实现继承,这其中有很多的属性指向和需要注意的地方. 原型链的特点和实现已经在之前的一篇整理说过了,就是通过将子类构造函数的原型作为父类构造函数的实例,这样就连通了子类-子类原型-父类,原型链的特点就是逐层查找,从子类开始一直往上直到所有对象的原型Object.prototype,找到属性方法之后就会停止查找,所以下层的属性方法会覆盖上层. 一个基本的基于原型链的继承过程大概是这样的: //先来个父类

1.js的继承的实现方法

原文摘自:https://www.cnblogs.com/gwf93/p/10384352.html 先写一个父类Car function Car(name){ this.name = name; this.driver = function (){ console.log('日行千里') } } Car.prototype.addOil = function(param){ this.oil = param; console.log(this.name + '每天加油' + param + '