2013-05-14 65 views
9

當我定義一個包含一個只寫屬性的接口:可以公開獲取getter時是否可以明確實現property setter?

public interface IModuleScreenData 
{ 
    string Name { set; } 
} 

,並試圖(天真)明確有意向實現它的屬性也有可公開獲得的getter:

public class ModuleScreen : IModuleScreenData 
{ 
    string IModuleScreenData.Name { get; set; } 
} 

然後我得到以下錯誤:

Error 'IModuleScreenData.Name.get' adds an accessor not found in interface member 'IModuleScreenData.Name'

錯誤或多或少的預期,但是,這種替代語法之後:

public class ModuleScreen : IModuleScreenData 
{ 
    public string Name { get; IModuleScreenData.set; } 
} 

未能編譯,我想我所要做的並不是真的可能。我是對的,還是有一些祕密 語法畢竟?

回答

10

你可以這樣做:

public class ModuleScreen : IModuleScreenData 
{ 
    string IModuleScreenData.Name 
    { 
     set { Name = value; } 
    } 

    public string Name { get; private set; } 
} 

在一個方面說明,我通常不會推薦純屬性。一種方法可能更好地表達意圖。

+0

我同意旁註,儘管其他方式 - 一個只讀屬性的接口,由一個類實現那些屬性是可寫的 - 你的解決方案也適用於此,這是更可接受的,可以說更爲常見。 –

+0

感謝這... –

-1

您無法更改接口在繼承類中的實現方式。這就是整個觀點。如果你需要對屬性做一些新的事情,你可以創建一個新的屬性來引用繼承的屬性特定的實現。接口在那裏,所以你可以遵循指定的標準來進行對象繼承。

UPDATE: 關於第二個想法..你應該能夠只是做這....這將精編:

public class ModuleScreen : IModuleScreenData 
    { 
     public string Name { get; set; } 
    } 
+0

我想避免創建一個新的屬性,如果可能的話。不知道你的意思是通過改變接口的實現方式 - 我知道我必須滿足接口中包含的合同,顯式實現肯定是實現這一目標的方法之一。 –

+0

查看我的更新....你應該可以添加get和滿足界面 – miskiw

相關問題