[英]Static method call from generic function
是否可以從泛型函數調用static
方法?
我需要做這樣的事情:
public static T CreateNewProject<T, V>(string token, string projectName)
where V : IProject<T>
{
V.LoadProject();
}
其中LoadProject()
必須是某個類的某些static
方法。
您不能使用約束來做到這一點,但是可以使用Reflection
。 在這種情況下,它似乎是唯一的選擇:
typeof(V).GetMethod("LoadProject", BindingFlags.Static | BindingFlags.Public)
.Invoke(null);
您可以使用單例來代替靜態類:
public interface ICanLoadProject
{
void LoadProject(string token, string projectName);
}
實現方式:
public class SampleProjectLoader : ICanLoadProject
{
private static SampleProjectLoader instance = new SampleProjectLoader();
private SampleProjectLoader(){}
public static SampleProjectLoader Instance { get{ return instance; } }
public void LoadProject(string token, string projectName)
{ /*Your implementation*/ }
}
然后通用可以使用:
where V : ICanLoadProject
與之前訪問該方法的代碼有關的所有事情是:
SampleProjectLoader.Instance.LoadProject("token","someName");
該方法可以是:
public static class ExtensionMethods
{
public static T CreateNewProject<T, V>(this V loader, string token, string projectName) where V : ICanLoadProject
{
loader.LoadProject(token, projectName);
return default(T); //no clue what you want to return here
}
}
並且將被稱為:
static void Main(string[] args)
{
object result = SampleProjectLoader.Instance.CreateNewProject<object, SampleProjectLoader>("token", "someName");
}
或者更好:
public static class ExtensionMethods
{
public static T CreateNewProject<T>(this ICanLoadProject loader, string token, string projectName)
{
loader.LoadProject(token, projectName);
return default(T); //no clue what you want to return here
}
}
並致電:
SampleProjectLoader.Instance.CreateNewProject<object>("token", "someName");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.