c#派生类继承构造函数
2012-10-28 16:03
239 查看
大家都知道C#构造函数主要用来设置类中属性的初始值,但经常会忽视类的构造方法也可以象方法一样引用调用父类中的构造方法或本身的其他构造方法。往往因此写了很多重复代码。下面的代码介绍了类的构造方法的几种用法。
知识点:调用父类base构造函数想必大家都知道,但是调用自身 :this(param…)构造函数不一定都了解,这里主要突出这个知识点。
using System;
namespace TestApplication
{
class Test
{
static void Main(string[] args)
{
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();
}
}
/// <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 ;
}
}
}
输出结果:
测试类A无参数构造方法
Set First Param
测试类A一个参数构造方法
Set First Param
测试类B无参数构造方法
Set First Param
Set Second Param
Set Third Param
测试类B一个参数构造方法
Set First Param
Set Second Param
Set Third Param
测试类B两个参数构造方法
Set First Param
Set Second Param
Set Third Param
测试类B三个参数构造方法
Set First Param
Set Second Param
Set Third Param
参考文献:/article/5679651.html
知识点:调用父类base构造函数想必大家都知道,但是调用自身 :this(param…)构造函数不一定都了解,这里主要突出这个知识点。
using System;
namespace TestApplication
{
class Test
{
static void Main(string[] args)
{
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();
}
}
/// <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 ;
}
}
}
输出结果:
测试类A无参数构造方法
Set First Param
测试类A一个参数构造方法
Set First Param
测试类B无参数构造方法
Set First Param
Set Second Param
Set Third Param
测试类B一个参数构造方法
Set First Param
Set Second Param
Set Third Param
测试类B两个参数构造方法
Set First Param
Set Second Param
Set Third Param
测试类B三个参数构造方法
Set First Param
Set Second Param
Set Third Param
参考文献:/article/5679651.html
相关文章推荐
- c#派生类继承构造函数
- 二十七、继承(四) 多重继承、虚继承与虚基类、虚基类及其派生类构造函数
- C#中基类和派生类的构造函数以及变量的执行顺序整理
- 第四章:继承--4.2.6 派生类的构造函数
- C#中继承带参构造函数
- 从零开始学C++之继承(二):继承与构造函数、派生类到基类的转换
- C#继承与构造函数的调用
- c++, 派生类的构造函数和析构函数 , [ 以及operator=不能被继承 or Not的探讨]
- 从零开始学C++之继承(二):继承与构造函数、派生类到基类的转换
- C++继承详解之二——派生类成员函数详解(函数隐藏、构造函数与兼容覆盖规则)
- c# 关于继承类中构造函数的实现
- C++中虚继承派生类构造函数的正确写法
- C++中类的继承与Java中的不同,C++的派生类不能继承父类的构造函数和析构函数(不一定正确)
- C#类继承中构造函数用法小结
- 【C++】继承时的名字遮蔽&&派生类的构造函数
- C++构造函数 & 拷贝构造函数 & 派生类的构造函数 & 虚继承的构造函数
- 关于C#中派生类调用基类构造函数的理解
- 友元关系与继承以及基类派生类定义构造函数时应该注意的事项
- 关于C#派生类调用基类构造函数的理解
- C#中构造函数不是不能被继承吗?为什么以下的构造函数先执行?