2014-12-01 68 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) 
    { 
     // ..