2

と呼ばれる基本クラスとGraphと呼ばれるインターフェースがありますIDataTip

これらの両方を実装するクラスがいくつかあります。次に例を示します。

class TreeGraph : Graph, IDataTip
{
  //interface implementation
}

メンバーの型が抽象クラスとインターフェースの両方に一致するクラスを必要とするように、別のクラスのメンバーを宣言する方法があるかどうか疑問に思いましたか?

たとえば、次のクラスでは:

class GraphExporter
{
    public Object GraphWithDataTip {set; get;}
}

タイプを、から継承して実装する必要がObjectあることを示すものに置き換えられるようにしたいと思います。これを行う方法はありますか?またはそうでない場合、誰かがより賢明なデザインをお勧めできますか?GraphWithDataTipGraphIDataTip

前もって感謝します!

4

4 に答える 4

6

一般的な制約を使用できます:

public class FooClass<T> where T: Graph, IDataTip
{
    public T Foo { get; set; }
}
于 2012-09-04T13:01:16.213 に答える
4

次のいずれかが必要なように聞こえます。

  • abstract class thing : Graph, IDataTipパラメータに使用される新しい基本タイプ( )
  • フォームのジェネリックメソッドvoid MyMethod<T>(T thing) where T : Graph, IDataTip

または、メソッド内でパラメーターをキャストし、適切でない場合は例外をスローすることもできますが、これは実行時のみのチェックになります。

于 2012-09-04T13:02:05.260 に答える
0

GraphとIDataTipの両方が実装するインターフェイスを定義してから、別のクラスのメンバーをその新しいインターフェイスのインスタンスにすることができます。

//new interface
interface IGraphAndDataTip
{
}

class Graph : IGraphAndDataTip
{
}

interface IDataTip : IGraphAndDataTip
{
}

class AnotherClass
{
    //implements both graph and IDataTip
    IGraphAndDataTip MyMember;
}
于 2012-09-04T13:02:23.820 に答える
0

基本クラスの派生クラスを意味していると思いますか?これはどういう意味ですか?

public abstract class Graph {
    public abstract void SomeMethod();
}

public interface IDataTip {
    void SomeMethod();
}

public class MyClassDerivedFromGraph: Graph, IDataTip {
    void SomeMethod() {
       // This method matches both the interface method and the base class method.
    }
}
于 2012-09-04T13:03:51.430 に答える