Cha*_*les 5 c# inheritance class
这个问题已经开启/关闭困扰我,我现在写了4个封装.我确信我做错了,需要找出我的理解分支的地方.
假设我使用Rectangle类来表示金属条.(这比动物更好)
所以说基类叫做"Bar".
private class Bar
{
internal Rectangle Area;
}
Run Code Online (Sandbox Code Playgroud)
所以.现在我们制作一个矩形,比如300个单位乘10个单位.
private Bar CreateBar()
{
Bar1 = new Bar1();
Bar1.Area = new Rectangle(new Point(0,0), new Size(300,10));
return Bar1;
}
Run Code Online (Sandbox Code Playgroud)
很棒,所以我们有一个基础吧.
现在让我们说我们想让这个酒吧有一种材料 - 比如钢铁.所以...
private class SteelBar : Bar
{
string Material;
}
Run Code Online (Sandbox Code Playgroud)
所以,如果我这样做...
private SteelBar CreateSteelBar()
{
SteelBar SteelB = new SteelB();
Bar B = CreateBar();
SteelB = B;
SteelB.Material = "Steel";
return SteelB;
}
Run Code Online (Sandbox Code Playgroud)
从我得到的内容,如果我调用CreateSteelBar,它会创建一个调用CreateBar的钢条.所以我最终得到了一个带有300×10矩形的钢筋,以及一个用于材料的无绳或空绳.然后我将材料设置为钢.
当我在我的程序中尝试类似的东西时,它一直在告诉我不能隐含地从较低级别的类中创建更高级别的类.考虑到我所看到的动物实例的所有遗传,我想这就是继承存在的原因,但我希望有人可以让我知道.
此外,我确信我可以打电话,SteelBar = CreateBar();
但我在这里做了很长的路.
Ree*_*sey 16
CreateBar
你没有使用method(),而是使用构造函数:
public Bar()
{
this.Area = new Rectangle(new Point(0,0), new Size(300,10));
}
Run Code Online (Sandbox Code Playgroud)
然后,在SteelBar中,您将调用基类构造函数:
public SteelBar()
{
this.Material = "Steel";
}
Run Code Online (Sandbox Code Playgroud)
基类构造函数将首先出现,因此您的区域已经设置好.不过,您可以明确地说明这一点,并将其显示在您的代码中:
public SteelBar()
: base()
{
this.Material = "Steel";
}
Run Code Online (Sandbox Code Playgroud)
但是,这通常仅在您希望具有带参数的特定构造函数时使用.
有关详细信息,请参阅C#编程指南中的构造函数.