【发布时间】:2012-06-16 16:56:21
【问题描述】:
这个问题一直困扰着我,我现在已经写了 4 个包装器。我确定我做错了,需要弄清楚我的理解在哪里分支。
假设我使用 Rectangle 类来表示金属条。 (这比动物效果更好)
所以说基类叫做“Bar”。
private class Bar
{
internal Rectangle Area;
}
所以。现在我们制作一个矩形,比如 300 x 10 个单位。
private Bar CreateBar()
{
Bar1 = new Bar1();
Bar1.Area = new Rectangle(new Point(0,0), new Size(300,10));
return Bar1;
}
太棒了,所以我们有一个基础栏。
现在假设我们想让这个酒吧有一种材料——比如钢。所以。 . .
private class SteelBar : Bar
{
string Material;
}
如果我这样做了。 . .
private SteelBar CreateSteelBar()
{
SteelBar SteelB = new SteelB();
Bar B = CreateBar();
SteelB = B;
SteelB.Material = "Steel";
return SteelB;
}
如果我调用 CreateSteelBar,它会创建一个调用 CreateBar 的钢筋。所以我最终得到了一个带有 300 x 10 矩形的钢筋,以及一个用于材料的空字符串。然后我将材质设置为钢。
当我在我的程序中尝试类似的事情时,它一直在告诉我不能从较低的下级隐式创建更高的上级。考虑到我看到的所有动物示例的继承,我会认为这就是存在继承的原因,但我希望有人能澄清我。
另外,我确定我可以打电话给SteelBar = CreateBar();,但我在这里做了很长的路。
【问题讨论】:
-
我不清楚你为什么不使用构造函数。这将大大简化您的问题。
-
你不会在
CreateBar()中返回值 -
在这种情况下 - 在我的系统中,我正在为其中包含 1 到 500 个项目的东西创建扩展。
-
SteelBar = new SteelBar();将是语法错误,您尝试在此处声明的变量的名称是什么
-
钢筋就是钢筋,这就是您所知道的。你不知道钢筋就是钢筋。据你所知,酒吧可能是湿吧。同样,狗也是动物。但是动物可能是也可能不是狗。它可能是一只猫。您返回动物的方法可以返回任何东西,试图将其分配给狗是行不通的。尝试将钢筋分配给钢筋是同样的事情。关键是 steelbar 可以隐式转换为 bar,而不是相反。您基本上似乎对继承的功能有错误的认识。
标签: c# class inheritance