[英]Access modifiers C#
我有一個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; } }
因此,這就像我的大師班,包括武器,法術和奴才一樣。 (當然,實際的類有更多的成員。)
然后我有一個從Card
繼承的Minion
類( Minion : Card
)
我面臨的問題是,顯然我可以從Minion
訪問這些成員(因為它們是公共的),甚至沒有任何意義( Minion.IsPlayer
嗎?顯然不是),所以我的問題是:我如何保留這些成員僅適用於Card
類而不適用於其子級?
private
修飾符稍后不會授予我在該庫其他部分的訪問權限,因此我無法使用它。
我在您的設計中看到的問題不是訪問修飾符,只是根本不正確。
擁有具有IsCard
屬性的Card
對象沒有太大意義,這也是為什么Minion
對象上的IsMinion
屬性也沒有意義的原因。 這些屬性實際上並不屬於Card
對象。
我建議重新考慮您的設計。 好像這個Card
類是一個包含所有那些玩家類型的enum
:
public enum Card
{
Minion,
Weapon,
Spell,
// etc..
}
當某些事情在繼承層次結構中看起來很特殊,例如不屬於派生類的公共財產時,通常這是一個停止的跡象,並考慮您如何計划事物以及它們為何看起來不正確。 在OOP中,大量關於創建適合問題的模型的問題。
如果我正確地遵循了您的問題,我想您想做的就是讓Card
類成為接口。 然后讓Minion
從該接口繼承。 這樣可以更好地控制值,同時又可以在派生類之間控制它們。
抱歉,如果我說的話不正確,但是這些答案都沒有幫助。 問題是訪問修飾符,這些屬性獲得的所有值都來自外部程序,所以並不是那么容易。
使用internal
關鍵字解決了我的問題,使其僅在程序集中可見。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.