2017-07-06 6 views
0

私は上記のような問題があります。私のコード:ジェネリッククラスの静的メソッドを使用

BaseFactory<SomeClass>.UpdateDataBase_static(); 

任意のアイデア:

public abstract class BaseFactory<T> where T: class 
{ 
    protected static dbModelContainer context = new dbModelContainer(); 

    public static int UpdateDataBase_static() 
    { 
     return context.SaveChanges(); 
    } 
} 

と私の質問は、私が代わりに

BaseFactory.UpdateDataBase_static(); 

を呼び出すことができる方法ですか?

+1

あなたは非包括的にそれを使用する意味ですか、またはあなたがあなたが本当にこれを行うことができない状況 – pm100

+0

からコンパイラの推論のTを持っている意味ですか。メソッドを非ジェネリッククラスに入れる必要があるか、またはそれを呼び出すときに型を指定する必要があります。あなたはそれを両方向に持つことはできません。 – recursive

+3

なぜあなたは静的コンテキストを持っていますか?これがEFコンテキストの場合は、必要なときに作成し、完了したら処分する必要があります。 –

答えて

1

あなたはそうではありません。

メソッドにその型引数を使用していなくても、クラスにアクセスするときには常にジェネリック型の引数を指定する必要があります。あなたはなのでは実際にメソッドのジェネリック型を使用していないので、そのクラスからそのメソッドを移動できることを意味します。ジェネリックではないクラスに移動することができますが、汎用引数を指定します。

0

あなたが求めていることを正確に行うことはできませんが、この方法ではTがまったく使用されないため、特定のクラスを指定せずにBaseFactory<object>.UpdateDataBase_static();を使用することができます。

しかし、一般的なパラメータを使用しないジェネリッククラスのメソッドは、編集上のコメントとしては存在しないはずです。

2

このような方法がないため、できません。最も近いのはジェネリッククラスが継承する非ジェネリックベースを持つことです。次に、パラメータ化タイプに依存しないメソッドを持つことができます。

0

BaseFactory.UpdateDataBase_static();に電話するには、クラスBaseFactoryが必要です。そこから汎用のBaseFactory<T>を継承します。

public abstract class BaseFactory 
{ 
    protected static dbModelContainer context = new dbModelContainer(); 

    public static int UpdateDataBase_static() 
    { 
     return context.SaveChanges(); 
    } 
} 

public abstract class BaseFactory<T>:BaseFactory where T: class 
{ 
    .... 
} 
関連する問題