1
怎麼假設我們有一個NodeInput
類是這樣的:我需要創建<T>類的對象,但我不知道T和我的計劃是找到使用泛型噸,但我不知道
public class NodeInput
{
}
public sealed class NodeInput<T> : NodeInput
{
}
我們有Node
類,如下所示:
public abstract class Node
{
public Node()
{
var fieldInfos = GetType().GetRuntimeFields();
// loop through all NodeInputs using their concrete base type
foreach (var item in fieldInfos)
{
Type t = item.FieldType;
if (t.BaseType == typeof(NodeInput))
{
// Here I want to initialize each NodeInput field according to
// the T but I don't know what the T is here.
}
}
}
}
我已經創建了具體的父類NodeInput
這樣我就可以算出來的所有NodeInput<T>
不論其T
參數類型。但我還需要T
來創建適當的對象並分配給循環中的每個字段。 對於下面的代碼示例PointNode
應主動與default(T)
所有NodeInput
領域,當我們創建一個對象:
public class PointNode : Node
{
public NodeInput<double> x;
public NodeInput<int> y;
public NodeInput<float> z;
}
PointNode node = new PointNode();
// Now x,y and z should be 0 = default(double),default(int),default(float)
這可能嗎?
這個問題很相似,你的另一個問題(http://stackoverflow.com/questions/31388962/method-與泛型收益型但並非通用輸入 - 是 - 這-可能)。就像以前一樣,我嚴重懷疑你在這裏採用的設計方法。你能否在更高的層面上描述你想解決的問題?爲了更具體地說明我的擔憂:爲了正確封裝和鬆散耦合,只有NodeInput必須知道如何填充其成員,而不是節點或任何其他類。 – Christoph
更好的辦法是把它放在'Node'的構造函數中。這將消除反思的需要並強化類型安全。 –