我有一個接口:爲什麼我需要在C#顯式實現中將「this」強制轉換爲接口類型?
public interface Profile
{
string Name { get; }
string Alias { get; set; }
}
實現Profile
所有的對象都有一個Name
和Alias
,但一些限制Alias
,使得它總是一樣Name
。適用此限制的功能才能實現Alias
這樣的:
string Profile.Alias
{
get
{
return ((Profile)this).Name;
}
set { }
}
由於顯式接口實現的範圍內this
只能有可能是Profile
型的,我們知道這是通過Profile
接口,而不是的訪問包含的類或其實現的任何其他接口,爲什麼需要演員?
使用return this.Name;
對該錯誤,吸氣實施效果:
Type `ConcreteProfile' does not contain a definition for `Name' and no extension method `Name' of type `ConcreteProfile' could be found (are you missing a using directive or an assembly reference?)
爲什麼不簡單地使用字符串別名=>名稱(c#6)或字符串別名{get {return Name;}}? – Boo
@Boo:因爲它需要實現具有setter的接口。就我個人而言,我會讓setter拋出一個異常,而不是忽略通話...或重新設計界面。 –