1

私が知っているように、継承されたクラスのインスタンスを、必要なメソッドが実装されているインターフェイスにアップキャストしてから呼び出す必要があります。

interface IProcess
{
    void Do() { Console.WriteLine("doing"); }
    //...
}

interface IWait
{
    void Wait() { Console.WriteLine("waiting"); }
    //...
}

class Example : IProcess, IWait { }


static void Main(string[] args)
{
    Example item = new Example();
    (item as IProcess).Do();
    (item as IWait).Wait();
}

必要なさまざまなメソッドのデフォルト実装を備えたインターフェースがほとんどない場合はどうなりますか? これを解決できるパターンはありますか、それとも特定のインターフェイスのメソッドを呼び出すために常にasキーワードを使用する必要がありますか?

4

3 に答える 3

1

実装クラスのメソッドをオーバーライドして、制御をデフォルトの実装に渡すことができます。

interface IProcess
{
    void Do() { Console.WriteLine("doing"); }
}

interface IWait
{
    void Wait() { Console.WriteLine("waiting"); }
}

class Example : IProcess, IWait 
{
    public void Do() => ((IProcess)this).Do();

    public void Wait() => ((IWait)this).Wait();
}

今、あなたはこれを行うことができます:

static void Main(string[] args)
{
    Example item = new Example();
    item.Do();
    item.Wait();
}
于 2021-01-25T23:25:31.577 に答える