2010-05-18 81 views
0

我有一個實現接口的類。在代碼的另一個領域,我檢查該類實例是否包含該接口,但它不起作用。檢查該類是否包含接口總是失敗(false),如果它應該爲true。爲什麼檢查接口失敗?

下面是我試圖完成的一個簡單表示。

public interface IModel 
    { 
     bool validate(); 
    } 


    public class SomeModel : IModel 
    { 
     public SomeModel 
     { 
     } 

     public bool Validate() 
     { 
      return true; 
     }   
    } 



    // Dummy method 
    public void Run() 
    { 
     SomeModel model = new SomeModel(); 

     if (model is IModel) 
     { 
      string message = "It worked"; 
     } 
     else 
     { 
      string message = "It failed"; 
     } 
    } 
+3

我認爲你在你的界面定義中有一個錯字,驗證應該是大寫 – luke 2010-05-18 21:02:02

+1

這個例子給出了一些錯字修正。你能給我們一個更完整的例子,說明你的代碼在哪裏出現問題? – Stephan 2010-05-18 21:05:20

+1

我無法用你的例子重現你的錯誤。請發佈一個顯示錯誤的例子。 – luke 2010-05-18 21:06:03

回答

7

你確定你測試了正確的界面嗎?我的意思是,使用IModel的正確版本進行「是」測試? IModel不會讓我成爲唯一的類型名稱,因此您可能導入了不正確的名稱空間。

嘗試明確限定您的支票。

I.e.

if (model is MyNamespace.IModel) ... 
+0

當時,就是這樣。我在項目的不同部分有兩個界面副本,一個是引用另一個,另一個是另一個。 我認爲subversion把它帶回到最近的更新中...... – chobo 2010-05-19 00:04:45

2

驗證是在類的界面和上殼體寫入小寫。你的例子甚至不應該編譯,因爲它是一個編譯器錯誤。

3

一個非常這裏常見的錯誤是由包括相同.cs文件在兩個不同的DLL來聲明接口在兩個不同的組件,例如。由於類型是由它們的程序集定義的,因此這會產生兩個衝突的接口,其中發生的具有相同的名稱。例如,當導入web服務時,相同的場景也很常見(與名稱空間不同)。代理/生成類型與原始類型不同。