2

これが可能かどうか興味があります。そうでない場合、その背後にある理由は何ですか?また、このプログラミングシナリオをどのように処理しますか?

私がこのインターフェースを持っているとしましょう:

public interface IBook
{
    void BookClient();
    void CancelClient();
}

そして、私は上記のインターフェースを実装するこのクラスを持っています:

public class Photographer : IBook
{
     public void BookClient()
     {
        // do something
     }

     public void CancelClient()
     {
        // do something
     }

     // non-interface methods
     public void SaveClients()
     {
        // do something
     }

     public void DeleteClients()
     {
        // do something
     }
} 

このクラスを次のようなコードのどこかのインターフェイス タイプに割り当てるとします。

IBook photo;
photo = new Photographer();

これを行うことは可能ですか:

// non-interface member from the Photographer class
photo.SaveClients();

誰かがこの問題について私を正し、おそらくこれに関して正しい方向に私を向けることができます. ありがとう。

4

3 に答える 3

11

はい、可能ですが、最初にキャストする必要がありphotoますPhotographer:

// non-interface member from the Photographer class
((Photographer)photo).SaveClients();

photo.SaveClients()別のクラスを簡単に作成できるため、構文だけでは不可能です。

class TestClass : IBook
{
    public void BookClient()
    {
       // do something
    }
     public void CancelClient()
    {
       // do something
    }
}

そして、そのように使用します:

IBook photo;
photo = new Photographer();
photo = new TestClass();

// what should happen here?
photo.SaveClients();

したがって、変数をインターフェイスの実装として使用する限り、そのインターフェイスで宣言されたメンバーにのみアクセスできます。ただし、オブジェクトは依然としてクラス インスタンスであるため、他のクラス メンバーを使用できますが、最初にその型に明示的にキャストする必要があります。

于 2013-07-11T07:06:42.613 に答える
2

インターフェイス型は、インターフェイス メンバーのみを参照できます。インターフェイスの一部ではないクラスのメンバーを呼び出そうとしています。

試すことができます(今はテストできません):

IBook photo;
photo = new Photographer();

(photo as Photographer).SaveClients();
// or
((Photographer)photo).SaveClients();
于 2013-07-11T07:07:40.660 に答える