我有一个类Card,它有一些属性从外部API中获取它们的值:
public bool IsCard { get { return this._isCard; } }
public bool IsSpell { get { return this._isSpell; } }
public bool IsMinion { get { return this._isMinion; } }
public bool IsWeapon { get { return this._isWeapon; } }
public bool IsPower { get { return this._isPower; } }
public bool IsPlayer { get { return this._isPlayer; } }
public bool IsGame { get { return this._isGame; } }
public bool IsHero { get { return this._isHero; } }所以这就像我的大师课上的所有卡片,包括武器,咒语和小黄人。(当然,真正的类有更多的成员。)
然后我有一个Minion类,它继承自Card (Minion : Card)
我面临的问题是,显然我可以从Minion访问这些成员(因为它们是公共的),而这甚至没有意义(Minion.IsPlayer?因此,我的问题是:我如何才能只为Card类而不是为它的子类保留这些成员?
private修饰符不会允许我稍后在库的其他部分访问,所以我不能使用它。
发布于 2014-07-27 23:13:44
如果我说的不对,很抱歉,但这些答案都没有帮助。问题是访问修饰符,所有这些属性得到的值都来自外部程序,所以并不那么容易。
使用internal关键字解决了我的问题,使它只在程序集中可见。
发布于 2014-07-27 03:15:13
我在您的设计中看到的问题不是访问修饰符,它只是简单的不正确。
拥有一个Card对象和一个IsCard属性并不完全合理,这也是为什么Minion对象上的IsMinion属性也没有意义的原因。这些属性并不真正属于Card对象。
我建议重新考虑你的设计。看起来,这个Card类似乎是一个包含所有播放器类型的enum:
public enum Card
{
Minion,
Weapon,
Spell,
// etc..
}当继承等级中的某些东西看起来很奇怪,比如不属于派生类的公共属性时,它通常是一个停止并思考如何规划事情以及它们为什么看起来不正确的标志。在面向对象程序设计( OOP )中,它总是致力于创建适合问题的正确模型。
发布于 2014-07-27 03:33:10
有些事情要注意:
继承是一种“是-一种”的关系。Minion : Card的意思是“Minion就是Card”。这可能是也可能不是你的意图。
您已经可以使用该语言询问对象是Card还是Minion或Spell。有几种方法可以做到这一点:
使用is关键字:(链接)
if (myObject is Spell)比较Types:(类型 类型)
if (myObject.GetType() == typeof(Spell))使用IsAssignableFrom方法(链接 )
if (typeof(Spell).IsAssignableFrom(myObject.GetType()))https://stackoverflow.com/questions/24977547
复制相似问题