-3

インターフェイスを実装するクラスがあります。

public class SQLiteHHSDBUtils : IHHSDBUtils
{

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

    . . .

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

真下に座っている自分の兄弟を見つけることができません ( if (!TableExists()):

名前 'TableExists' は現在のコンテキストに存在しません

どうすればそれが見えますか / なぜ見えないのですか?

4

3 に答える 3

6

明示的なインターフェイスの実装があります。現在のインスタンスをインターフェイス タイプにキャストしない限り、インターフェイス メソッドに直接アクセスすることはできません。

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

13.4.1 から明示的なインターフェイス メンバーの実装

メソッド呼び出し、プロパティ アクセス、またはインデクサー アクセスで、完全修飾名を使用して明示的なインターフェイス メンバーの実装にアクセスすることはできません。明示的なインターフェイス メンバーの実装は、インターフェイス インスタンスを介してのみアクセスでき、その場合は単にそのメンバー名によって参照されます。

于 2014-12-01T22:20:27.100 に答える
3

インターフェイスを明示的に実装する場合は、型がインターフェイスとまったく同じ (実装型ではない) 変数からインターフェイス メンバーにアクセスする必要があります。

if (!TableExists("AppSettings"))型が、notであるオブジェクトをTableExists介して呼び出しています。thisSQLiteHHSDBUtilsIHHSDBUtils

試す:

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

または、インターフェイスを明示的に実装しないでください。

public class SQLiteHHSDBUtils : IHHSDBUtils
{
    // .. 
    bool TableExists(string tableName)
    {
        // ..
于 2014-12-01T22:20:50.423 に答える
2

TableExists明示的な実装です。アクセスしたい場合は、次のようにキャストthisする必要がありIHHSDBUtilsます。

void IHHSDBUtils.SetupDB()
{
    . . . 
    if (!((IHHSDBUtils)this).TableExists("AppSettings"))
于 2014-12-01T22:20:29.337 に答える