簡體   English   中英

C#語法:在實現的聲明中放置接口的名稱

[英]C# syntax: Placing the interface's name in the implementation's declaration

我在WPFDelegateCommand<T>類的復合應用程序庫源代碼中遇到了一些我不熟悉的有趣的C#語法。

有一些方法聲明以ICommand接口名稱為前綴,並且它們沒有指定可訪問性修飾符。 例如:

bool ICommand.CanExecute(object parameter) { ... }

這個語法叫什么,我在哪里可以閱讀更多信息? 我假設有一個隱含的public ,但我無法弄清楚指定類名的好處是什么。 我的猜測是它可能只適用於組織。

當你放置這樣的方法時,你會說這是接口顯式實現 您可以通過該鏈接閱讀MSDN上的好教程。

此外, 比較可能有助於全面了解這意味着什么。

它被稱為顯式接口實現

如果一個類實現了兩個包含具有相同簽名的成員的接口,那么在該類上實現該成員將導致兩個接口都使用該成員作為其實現。

但是,如果兩個接口成員不執行相同的功能,則可能導致一個或兩個接口的錯誤實現。 可以實現接口成員顯式創建僅通過接口調用的類成員,並且特定於該接口。 這是通過使用接口名稱和句點命名類成員來完成的。

顯式接口實現教程

它被稱為接口的顯式實現 這意味着CanExecute的這個特定實現將不可見(並且不會運行),除非該對象被轉換為ICommand。

這在允許類為方法名稱重疊的不同接口提供不同實現時非常有用

public interface  InterfaceOne {
  void SomeMethod();
}
public interface InterfaceTwo {
  void SomeMethod();
}
public class Impl : InterfaceOne, InterfaceTwo {
  public void InterfaceOne.SomeMethod() {Console.WriteLine("One");}
  public void InterfaceTwo.SomeMethod() {Console.WriteLine("Two");}
}

我個人討厭這種語法。 OracleParameter為例, 它只提供ICloneable的顯式實現

如果您有對OracleParameter的引用,則Clone()方法將不會出現在intellisense中,並且在“轉到定義”時將不可見。 但是,如果你這樣做((ICloneable)parameter).Clone() 為了甚至知道這是可能的,你可以做到這一點,你幾乎陷入了博客搜索。

這稱為顯式接口實現 ,您可以在此處閱讀。

基本思想是這些方法/屬性只有在通過該類型的接口實例顯式使用時才可訪問。

這稱為顯式接口實現,您可以在此處閱讀更多相關信息

在Visual Studio中,如果從界面繼承,則可以右鍵單擊類定義中的界面名稱。 您可以單擊“實現接口”,或在子菜單“顯式實現接口”中單擊。 這是實現接口的便捷捷徑。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM