我是C ++程序员,我是C#的新手,我编写了一个小程序来测试继承,所以这里有源代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Lesson3_Class_inherit_
{
public class Personne
{
public string Name;
public int Age;
public Personne() { }
public Personne(string _Name, int _Age)
{
Name = _Name;
Age = _Age;
Console.WriteLine("Constrcut Personne Called\n");
}
~Personne()
{
Console.WriteLine("Destruct Personne Called\n");
}
};
class Humain : Personne
{
public string Langue;
public Humain(string _Name, int _Age,string _Langue)
{
Console.WriteLine("Constrcut Humain Called\n");
Name = _Name;
Age = _Age;
Langue =_Langue;
}
};
class Program
{
static void Main(string[] args)
{
Humain H1 = new Humain("majdi", 28, "Deutsch");
Console.ReadLine();
}
}
}
输出:构建Humain称为\ 和Personne类的构造没有被称为为什么!!! 在C ++中,首先调用父类构造函数! 请帮忙!
答案 0 :(得分:3)
在C#中,您必须使用base关键字显式调用父构造函数。 所以Humain看起来像
class Humain : Personne
{
public string Langue;
public Humain(string _Name, int _Age,string _Langue) : base(_Name, _Age)
{
Console.WriteLine("Constrcut Humain Called\n");
Name = _Name;
Age = _Age;
Langue =_Langue;
}
};
答案 1 :(得分:1)
因为它调用默认构造函数。要调用其他构造函数,您需要编写:
base(_Name, _Age);
在Humain的构造函数的开头。
答案 2 :(得分:1)
public Humain(string _Name, int _Age,string _Langue) : base(_Name, _Age)
{
Lange = _Langue;
}
答案 3 :(得分:0)
尝试以这种方式调用基类构造函数:
class Humain : Personne
{
public string Langue;
public Humain(string _Name, int _Age, string _Langue) : base (_Name, _Age)
{
Console.WriteLine("Constrcut Humain Called\n");
Name = _Name;
Age = _Age;
Langue = _Langue;
}
}
根据您的要求,您甚至可以调用 默认构造函数 ,而不是 参数化构造函数 。
public Humain(string _Name, int _Age, string _Langue) : base ()
{
Console.WriteLine("Constrcut Humain Called\n");
Name = _Name;
Age = _Age;
Langue = _Langue;
}