2017-07-06 77 views
0

我有上面的問題。我的代碼:使用通用類的靜態方法

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(); 

代替:

BaseFactory<SomeClass>.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 
{ 
    .... 
}