Я пытаюсь написать универсальный метод, который будет принимать любой тип и создать его экземпляр, так что я могу использовать его позже:ссылаться на экземпляр класса по его типу
Пример класса, который я хочу, чтобы динамически генерировать:
public class bb_ColorScaleCriteriaTypes
{
public Dictionary<string, int> Types { get; set; }
public bb_ColorScaleCriteriaTypes()
{
this.Types = new Dictionary<string, int>()
{
{"LowestValue", 1},
{"Number", 0},
{"Percent", 3},
{"Formula", 4},
{"Percentile", 5},
{"HighestValue", 2},
{"AutomaticMax", 7},
{"AutomaticMin", 6},
{"None", -1}
};
}
public static int byName(string name)
{
if (name == null)
{
throw new ArgumentException("name");
}
int intValue = new bb_ColorScaleCriteriaTypes().Types[name];
return intValue;
}
}
Нормально у меня есть еще один класс, который я могу назвать так:
public class bb_ColorScaleCriteriaTypesUI : DSDropDownBase
{
private const string NO_FAMILY_TYPES = "No types were found.";
public bb_ColorScaleCriteriaTypesUI() : base("Color Scale Criteria Type") { }
// Get Data Class that holds dictionary
public static bb_ColorScaleCriteriaTypes cscTypes = new bb_ColorScaleCriteriaTypes();
protected override SelectionState PopulateItemsCore(string currentSelection)
{
Items.Clear();
Dictionary<string, int> d = new Dictionary<string, int>(cscTypes.Types);
}
Как вы можете видеть, я инстанцирование класса bb_ColorScaleCriteriaTypes и последующий вызов типов на Это. Тем не менее, я хочу написать более общую реализацию, где я мог бы просто сделать что-то похожее на это:
public abstract class bb_ColorScaleCriteriaTypesUI : DSDropDownBase
{
public bb_ColorScaleCriteriaTypesUI (string name, Type elementType) : base(name) { this.ElementType = elementType; PopulateItems(); }
private const string noTypes = "No Types available.";
public Type ElementType;
// how to instantiate an instance of ElementType here?
protected override SelectionState PopulateItemsCore(string currentSelection)
{
if (this.ElementType != null)
{
Dictionary<string, int> d = new Dictionary<string, int>(myTypeInstance.Types); //so I can call it here
}
Похоже, это стало немного из стороны в комментариях действительно быстро.
В любом случае, я не возражаю против использования Activator.CreateInstance(), но как я могу создать экземпляр типа и вернуть его к типу, чтобы его не являлся общим объектом?
Похоже, что вы ищете [Activator.CreateInstance()] (https://msdn.microsoft.com/en-us/library/system.activator.createinstance (v = vs.110) .aspx). – itsme86