2014-12-01 42 views
-3

我有一個實現接口的類:這個實現者方法爲什麼沒有看到它的兄弟姐妹?

public class SQLiteHHSDBUtils : IHHSDBUtils 
{ 

    void IHHSDBUtils.SetupDB() 
    { 
      . . . 
      if (!TableExists("AppSettings")) 

    . . . 

    bool IHHSDBUtils.TableExists(string tableName) 
    { 
    . . . 

它找不到自己的弟弟坐在下面它(if (!TableExists()):

名稱「TableExists」不存在於當前背景下

它怎麼能/爲什麼它不能看到它?

+2

你真的應該學會如何顯示所有相關代碼..你向我們展示一些東西,希望我們知道你在說什麼..我們不知道'IHHSDBUtils'是什麼樣的,我們也不知道'TableExists'應該是什麼..非常差的問題最多 – MethodMan 2014-12-01 22:18:00

+1

爲什麼這個問題被標記爲不清楚? [Duplicate](http://stackoverflow.com/q/2520727/3367144),當然。但是,OP正在問的是什麼,正如3個正確和相關的答案所表明的那樣。 – kdbanman 2015-11-25 17:54:53

回答

6

您有明確的接口實現。你不能直接訪問你的接口方法,除非你施放當前實例的接口類型:

if (!((IHHSDBUtils)this).TableExists("AppSettings")) 

13.4.1 Explicit interface member implementations

這是不可能通過其全名來訪問顯式接口成員實現方法調用,屬性訪問或索引器訪問。一個顯式的接口成員實現只能通過一個接口實例來訪問,在這種情況下,只能通過它的成員名稱來引用。

2

TableExists是一個明確的實現。如果您要訪問它,你要投thisIHHSDBUtils

void IHHSDBUtils.SetupDB() 
{ 
    . . . 
    if (!((IHHSDBUtils)this).TableExists("AppSettings")) 
3

當你明確實現一個接口,你需要從它的類型是完全相同的接口(不是一個變量來訪問該界面件實施類型)。

if (!TableExists("AppSettings"))經由this對象,其類型爲SQLiteHHSDBUtils,不IHHSDBUtils主叫TableExists

嘗試:

if (!((IHHSDBUtils)this).TableExists("AppSettings")) 

另外,沒有明確實現的接口:

public class SQLiteHHSDBUtils : IHHSDBUtils 
{ 
    // .. 
    bool TableExists(string tableName) 
    { 
     // ..