簡體   English   中英

C#使用具有不同參數的基類中的方法

[英]C# Use a method from a base class with a different parameter

我已經對這個問題進行了很多研究,並且已經知道直接答案。 您不能使用新參數覆蓋基本方法。 問題是,我想做的事情很簡單,但我不知道要尋找什么,或者我想做的事是無稽之談,因此,如果有人可以指出我的方向,那將是一個很好的方向。

這就是我想要做的。 我有一個帶有創建方法的基類。 此方法采用Type參數,並使用反射創建具有其屬性的關聯對象。 無論我作為參數傳遞的類型如何,它的效果都很好,但是現在我希望此方法返回參數中所述的類型傳遞,以將其添加到列表中 自然地,我只是向創建的模型添加了返回值,但無法將Type對象添加到List Student( 此處為我自己的類型 )。 因此,我試圖創建一個派生類,然后在該類中將參數從Type更改為Student。 顯然這是行不通的,但是現在我被卡住了。 我的基本方法運行完美(除了事實不返回我想要的東西),我只想修改派生類的返回類型。 這是代碼片段。 (注意:我是法國人)

abstract class ControllerBase
{
    public virtual Type Create(ControlContainer controlContainer, Type typeToCreate)
    {
        dynamic returnObject = null;

        //Stuff that creates my returnObject

        return returnObject;
    }
}

class StudentControl : ControllerBase
{
    static public List<Student> Students{ get; set; }

    public Type Create(ContainerControl containerControl, Type typeToCreate)
    {
        typeToCreate = typeof(Student);
        return base.Create(containerControl, typeToCreate);
    }
}

所以,這基本上就是我想要做的。 將我的基本方法的返回類型轉換為派生類中的另一種類型,以便將其添加到學生列表中。 我已經環顧四周,但實際上並不需要在這里尋找什么。 我不能在這里使用<T>泛型方法,因為反射不適用於泛型類型

誰說反射不適用於泛型?

abstract class ControleurBase
{
    public virtual T Créer<T>(ConteneurControle conteneurControle)
    {
        var actualType = typeof(T); // use this instead of the Type parameter
        dynamic modele = null;

        //Stuff that creates my model  

        return (T)modele;
    }
}

class ControleurÉtudiant : ControleurBase
{
    public static List<Étudiant> Etudiant { get; set; }

    public Étudiant Créer(ConteneurControle conteneurControle)
    {
        return base.Créer<Étudiant>(conteneurControle);
    }
}

順便說一句,您真的不應該編寫非英語的代碼。 對於不懂法語的人來說,這很困難。

暫無
暫無

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

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