Предположим, что мы имеем 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
в следующем коде должны инициировать все NodeInput
поля с default(T)
когда мы создаем объект, который:
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'. Это устранило бы необходимость отражения и обеспечения безопасности типов. –