簡體   English   中英

靜態方法中的泛型參數調用同一個類 - 有更好的選擇嗎?

[英]Generic parameter in static method is calling the same class - is there a better option?

我有一個包含方法的基類。 我希望能夠使用基類中定義的靜態方法從派生類的實例(可能覆蓋該方法)中調用該方法。 目前我的代碼如下所示:

基類

public abstract class BaseClass<T> where T : class, new()
{
    protected BaseClass()
    {

    }

    protected BaseClass(string constructorParam)
    {
        Property = constructorParam;
    }

    protected readonly string Property;

    public virtual void Action(string methodParam)
    {
        //Do some stuff
    }

    public static void DoAction<U>(string constructorParam, string methodParam) where U : BaseClass<T>, new()
    {
        BaseClass<T> myObject = (BaseClass<T>) Activator.CreateInstance(typeof(U), new object[] {constructorParam});
        myObject.Action(methodParam);
    }

}

派生類

public DerivedClass : Migrater<SomeClass>
{
    public DerivedClass()
    {
    }

    public DerivedClass(string constructorParam) : base(constructorParam)
    {
    }

    public override void Action(string emthodParam)
    {
        //Do some other stuff   
    }
}

這一切都有效,但是當我調用我的DoAction方法時,它看起來像這樣:

DerivedClass.DoAction<DerivedClass>(someValue, someValue);

在我看來,這看起來很丑陋和冗余,並表明可能有更好的方法。 理想情況下,我想要更像這樣的東西:

BaseClass.DoAction<DerivedClass>(someValue, someValue);

甚至這個:

DerivedClass.DoAction(someValue, someValue);

無需在派生類中定義任何內容。 這可能嗎?

您也可以在類級別定義U

public abstract class BaseClass<T, U> 
    where T : class, new()
    where U : BaseClass<T, U>, new()
{
    public static void DoAction(string constructorParam, string methodParam)
    {
        BaseClass<T, U> myObject = (BaseClass<T, U>) Activator.CreateInstance(typeof(U), new object[] {constructorParam});
        myObject.Action(methodParam);
    }
}

那么你對派生類的定義是這樣的:

public DerivedClass : Migrater<SomeClass, DerivedClass>
{
}

這樣就可以這樣調用它:

DerivedClass.DoAction(someValue, someValue);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM