簡體   English   中英

如何在C#中定義基於命名空間的模板類或函數?

[英]How to define a namespace based template class or function in c#?

在C#中,我可以定義這樣的類嗎, T是這里的名稱空間名稱,而不是數據類型名稱。

public class MyClass<T> 
{
    T.DataType_Defined_in_T t;
    ...........    
}

或功能中:

public void MyFunction<T>(T.DataType_Defined_in_T t) 
{
   ...............
}

有沒有辦法實現這個目標?

或者,可以在運行時使用來切換引用:

之間:

using namespace  np1;

using namespace  np2;

無法使用名稱空間來執行此操作,但是您可以實現一個類,該類充當名稱空間中類型的訪問器或工廠。

interface IFactory
{
    Type GetType1();
}

namespace X
{
    public class Type1 { }

    public class Factory : IFactory
    {
        public Type GetType1() { return typeof(Type1); }
    }
}

namespace Y
{
    public class Type1 { }

    public class Factory : IFactory
    {
        public Type GetType1() { return typeof(Type1); }
    }
}

public void MyFunction<T>(T factory)
    where T : IFactory
{
    var type = factory.GetType1();
    ...
}

void Main()
{
    MyFunction(new X.Factory());
    MyFunction(new Y.Factory());
}

或者,您可以實施非通用反射解決方案:

public void MyFunction(string ns)
{
    var typesReader = from asm in AppDomain.CurrentDomain.GetAssemblies()
                      from type in asm.GetExportedTypes()
                      where type.Namespace == ns
                      select type;

    var typeMap = typesReader.ToDictionary(t => t.Name);

    var type1 = typeMap["Type1"];

    ...
}

void Main()
{
    MyFunction("X");
    MyFunction("Y");
}

請注意,如果尚未在appdomain中加載包含名稱空間的程序集,則此反射解決方案將無法使用。

暫無
暫無

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

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