[英]c# preventing inheritance of a method
对于扑克解析器(我的第一个学习c#的项目),我有一个父类clCardsHeld
和两个子类clHiHand
和clLoHand
。 clCardsHeld
还包含两种子类型中的每一种的属性和私有字段。 所以我最终得到的是这种继承,例如:
public class clCardsHeld
{public clHiHand HiHand { Get {} Set {} }
}
public class clHiHand : clCardsHeld{}
clCardsHeld Hand3 = new clCardsHeld();
clHiHand hi = new clHiHand();
hi = Hand3.HiHand.HiHand.HiHand;
hi = Hand3.HiHand.LoHand.HiHand;
(由intellisense提示)。 ( HiHand
不应该有另一个HiHand
作为自己的属性,也不应该是低手。但是CardsHeld
有一个HiHand
和LoHand
作为属性,例如,你获得7张牌的游戏,你可以使用5来制作最好的牌和5为最坏的可能,两者同时播放,每个锅的一半。)
我将基类字段设为私有,而不是保护,因此如果我已正确识别,则继承的属性保持为null
。 但我真的希望这个财产不被继承。 试图研究这个,我看到只有在覆盖基本属性时才能密封属性。 并且“隐藏”该方法通常是指在孩子中具有不同的代码....
另外一件事,当我抛弃我的新手问题时:
public class clCardsHeld { private List<clCards> _liCards; }
public class clHiHand : clCardsHeld
我可以在locals窗口找到clCardsHeld._liCards
,但我在locals窗口找不到clCardsHeld.clHiCards._liCards
(但是我可以通过将它分配给变量来获取它。
谢谢你的帮助。
正如Adeel引用的链接中所提到的,这种情况下的继承是不必要的。 你的高手和低手应该只是clCardsHeld的新实例:
public class clCardsHeld
{
private List<clCards> _liCards;
public clCardsHeld GetLoHand()
{
//Logic here for returning the low hand, using _liCards
}
public clCardsHeld GetHiHand()
{
//Logic here for returning the high hand, using _liCards
}
}
GetLoHand()和GetHiHand()函数将只返回一组不同的持卡。
您的帖子中有一些误解。
我认为你应该将所有对象的共同点分成一个单独的基类:
class HandBase { /* common to both HiHand an LoHand */}
class LoHand : HandBase {}
class HiHand : HandBase {}
从我的解释中可以看出,cCardsHeld不必具有相同的基类型:
class CardsHeld
{
public LoHand LoHand { get; private set;}
public HiHand HiHand { get; private set;}
}
但如果确实如此,那么你可以这样做:
class CardsHeld : HandBase
{
public LoHand LoHand { get; private set;}
public HiHand HiHand { get; private set;}
}
如果存在您不希望子类具有的属性,则不要将其放在基类中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.