[英]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.