首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >访问修饰符C#

访问修饰符C#
EN

Stack Overflow用户
提问于 2014-07-27 03:05:52
回答 5查看 157关注 0票数 1

我有一个类Card,它有一些属性从外部API中获取它们的值:

代码语言:javascript
复制
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修饰符不会允许我稍后在库的其他部分访问,所以我不能使用它。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-07-27 23:13:44

如果我说的不对,很抱歉,但这些答案都没有帮助。问题是访问修饰符,所有这些属性得到的值都来自外部程序,所以并不那么容易。

使用internal关键字解决了我的问题,使它只在程序集中可见。

票数 0
EN

Stack Overflow用户

发布于 2014-07-27 03:15:13

我在您的设计中看到的问题不是访问修饰符,它只是简单的不正确。

拥有一个Card对象和一个IsCard属性并不完全合理,这也是为什么Minion对象上的IsMinion属性也没有意义的原因。这些属性并不真正属于Card对象。

我建议重新考虑你的设计。看起来,这个Card类似乎是一个包含所有播放器类型的enum

代码语言:javascript
复制
public enum Card
{
   Minion,
   Weapon,
   Spell,
   // etc..
 }

当继承等级中的某些东西看起来很奇怪,比如不属于派生类的公共属性时,它通常是一个停止并思考如何规划事情以及它们为什么看起来不正确的标志。在面向对象程序设计( OOP )中,它总是致力于创建适合问题的正确模型。

票数 5
EN

Stack Overflow用户

发布于 2014-07-27 03:33:10

有些事情要注意:

继承是一种“是-一种”的关系。Minion : Card的意思是“Minion就是Card”。这可能是也可能不是你的意图。

您已经可以使用该语言询问对象是Card还是MinionSpell。有几种方法可以做到这一点:

使用is关键字:(链接)

代码语言:javascript
复制
if (myObject is Spell)

比较Types:(类型 类型)

代码语言:javascript
复制
if (myObject.GetType() == typeof(Spell))

使用IsAssignableFrom方法(链接 )

代码语言:javascript
复制
if (typeof(Spell).IsAssignableFrom(myObject.GetType()))
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24977547

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档