簡體   English   中英

泛型和繼承問題

[英]Generics and Inheritance Problem

我很想說這個問題與我的通用體系結構有關,但是無論哪種方式,作為示例進行展示都可能比描述起來容易。

public class AppUserBase
{
}

public class AppUserAbc : AppUserBase
{
}

public class ManagerBase<T> where T : AppUserBase
{
    protected AppUserCollection<T> _users = new AppUserCollection<T>();
}

public class ManagerAbc : ManagerBase<AppUserAbc>
{

}

public static class Program
{
    public static void Main()
    {
        ManagerAbc x = new ManagerAbc();
        DoSomething(x); //fails
    }

    public static void DoSomething<M,U>(ManagerBase<AppUserBase> manager) where M : ManagerBase<U> where U : AppUserBase
    {
        //do something!
    }
}

我希望我想做的事情很容易理解,我應該做的事情甚至更容易向我解釋:-)。

這是因為您有兩個類型參數,但是方法簽名中只有一個,因此無法同時推斷兩個參數。 另一個不需要。 將方法簽名更改為:

public static void DoSomething<U>(ManagerBase<U> manager)
    where U : AppUserBase
{
    //do something!
}

您可能知道,那需要工作。 原因是ManagerAbc的類型不是ManagerBase<AppUserBase> 通用部分是同一類型沒有幫助。 您可以嘗試更改為:

public static void DoSomething<M,U>(ManagerBase<U> manager) where M : Manager<U> where U : AppUserBase

暫無
暫無

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

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