[英]Inheritance/classes in C#
我是C#的新手,正在努力理解课程和“是一种”关系。 我一直试图让一段代码工作,但我似乎无法做到正确。
它看起来像这样: http : //pastebin.com/cQDusptB
我有一个基类,哺乳动物,其中一个应该能够创建实例,给出哺乳动物的名称作为输入。 我还有一个班,狗,这是一个哺乳动物。 应该能够以与Mammal相同的方式创建此实例。
任何人都可以看到我的缺陷吗? 如果是的话,你能解释我误解/忘记的内容吗?
在发布这样的问题时,发布编译器给出的错误消息也很有帮助。
任何人都可以看到我的缺陷吗?
你有一个虚拟的构造函数。
你能解释一下我误解/忘记了什么吗?
构造函数不是在C#中继承的 ,因此将它们标记为虚拟或覆盖是没有意义的。
Dog的构造函数需要命名为“Dog”。 你不能/不需要覆盖“哺乳动物”。 此外,Mammal的构造函数不应该是虚拟的。
public class Mammal
{
public Mammal(string name)
{
//....
}
}
public class Dog : Mammal {
public Dog(string name) : base(name)
{
}
}
使用“base”关键字将参数传递给基类构造函数(请参阅上面的代码)。
一定要拿一本关于C#的好书来正确掌握语言基础知识。
你在这里有一些问题。 例如,构造函数不能标记为虚拟或重写。 另一个问题是您尝试在没有括号的情况下调用方法.Name
。 更正后的版本如下所示:
public class Mammal
{
protected string _Name;
public virtual string Name()
{
return (this._Name + " - of type " + this.GetType());
}
public Mammal(string Name)
{
this._Name = Name;
}
}
public class Dog : Mammal
{
public Dog(string Name) : base(Name)
{
}
public override string Name()
{
return (base._Name + "Dog");
}
}
static void Main()
{
Mammal AnimalA = new Mammal("SubjectA");
Console.WriteLine("{0}", AnimalA.Name());
Mammal AnimalB = new Dog("SubjectB");
Console.WriteLine("{0}", AnimalB.Name());
Console.ReadLine();
}
构造函数不会被继承/覆盖。
public Dog(string name):base(name){
}
现在,当构建一条狗时,它将调用传递给指定名称的哺乳动物基类构造函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.