0

私にはインターフェースがIPetあり、別のプロジェクトにはDogから継承するクラスがありIPetます。私にはメソッドがありますが
、にはありません。 のプロジェクトでは、のインスタンスを持つクラスもあります。 今、私はこのようなものを作りたいです: DogBark()IPet
IPetPetSimulationIPet

IPet myDog = new IPet("Rex");  
myDog.Bark();  

ただしIPet、メソッドはありません。やなどの他のクラスもメソッドを継承しますが、メソッドを持たないBark()ため、このままにしておく必要があります。 また、私はこのようなことをすることはできません: CatHorseIPetBark

Dog myDog = new Dog("Rex");  

Dog別のプロジェクトにある からです。

そこにメソッドを実装せずに、インターフェイスを介してBarkサブクラスのメソッドを呼び出す方法はありますか?DogIPet

4

4 に答える 4

2

簡単な答え:いいえ。

少し長い答え:

次のように、をテストして、IPetがであるかどうかを確認できDogます。

Dog dog = myDog as Dog;
if (dog != null)
{
    dog.Bark();
}

非常にまれな状況を除いて、質問のようにインターフェイスを直接作成することはできないことに注意してください。

于 2012-11-02T15:14:26.770 に答える
1

できません。ただし、IPetから継承するBarkメソッドを使用してインターフェイスIDogを作成することはできます。

public interface IPet
{

}

public interface IDog : IPet
{
    void Bark();    
}

public class Dog : IDog
{
    public void Bark()
    {
        Console.WriteLine("Wouff!");    
    }
}
于 2012-11-02T15:20:24.663 に答える
0

そのクラスだけが持つメソッドにアクセスするには、myDogをDogにキャストする必要があります。

IPet myDog = new IPet("Rex");  
((Dog)myDog).Bark();  

インターフェイスにBarkを実装する場合は、それを実装するすべてのクラスで必要になります。

Dogのプロジェクトへの参照を追加してDogにアクセスできますか?

于 2012-11-02T15:12:12.597 に答える
0

Dogクラスに実際にアクセスできず、.NET 4以降で作業している場合は、試してみてください。

dynamic dog = new ...
dog.Bark()
于 2012-11-02T15:14:38.417 に答える