2016-10-04 14 views
0

私はJavaでそのようなコードを持っています。類似の解決策を作る方法C#。 特に興味があります最初と最後の行を実装する方法C#でジェネリックメソッドを実装する方法

このコードは、指定されたパッケージを通過する(つまりは、AndroidとiOSのためのフォームが含まれています)とgetTargetPlatform(に応じて、AndroidのフォームインスタンスまたはiOSを返す)

public static <T extends Helpers> T getPage(Class pageInterface) throws Exception { 
    Set<Class<?>> allClasses = new Reflections("forms", new SubTypesScanner(false)).getSubTypesOf(Object.class); 
    for (Class pageClass : allClasses) { 
     if (pageInterface.isAssignableFrom(pageClass) && pageClass.getName().contains(String.format(".%1$s.", getTargetPlatform()))) { 
      return (T) pageClass.newInstance(); 
     } 
    } 
    return (T) pageInterface.newInstance();} 
+0

可能な重複(HTTP: //stackoverflow.com/questions/2144495/creating-a-generic-method-in-c-sharp) – STaefi

+0

「最初の行」とは、メソッドの署名を意味しますか? – toadflakz

答えて

0

あなたのユースケースに応じて、ためにアセンブリをスキャンすることができあなたのタイプ。例:

public static T GetPage<T>(Type pageInterface) where T : Helpers 
{ 
    // maybe you need to scan different assemblies, depending on your usecase 
    var allTypes = Assembly.GetExecutingAssembly().GetTypes(); 

    foreach (var pageType in allTypes) 
    { 
     if (pageInterface.IsAssignableFrom(pageType) && pageType.Name.Contains(String.Format(".%1$s.", GetTargetPlatform()))) 
     { 
      return (T)Activator.CreateInstance(pageType); 
     } 
    } 
    return (T)Activator.CreateInstance(pageInterface); 
} 
0

最初の行は以下のようである:

public static T getPage<T>(Class pageInterface) where T: Helpers 

と最後の行は、ちょうど同じである:[C#でジェネリックメソッドの作成]の

return (T) pageInterface.newInstance(); 
関連する問題