Заставить компилятор C# создать неиспользуемый экземпляр объектаC#

Место общения программистов C#
Ответить
Anonymous
 Заставить компилятор C# создать неиспользуемый экземпляр объекта

Сообщение Anonymous »

Да, именно то, что я хочу сделать :) По крайней мере, для определенного класса.Проблема в том, что я создаю статический экземпляр объекта, но не использую его напрямую. Поскольку я выполняю некоторые операции в конструкторе, например добавляю объект в список, конструктор должен быть вызван хотя бы один раз, прежде чем я получу список.

Думаю, что компилятор просто оптимизирует неиспользуемый объект.

Должно быть простое решение: -/

РЕДАКТИРОВАТЬ


Хорошо, может быть я что-то пропустил. Позвольте мне опубликовать мой код. Я написал класс для специального перечисления.

public class TypeSafeEnum
{
protected readonly TNameType name;
protected readonly TValueType value;

private static List listEnums = new List();

protected TypeSafeEnum(TNameType name, TValueType value)
{
this.name = name;
this.value = value;

listEnums.Add(this);
}

public TNameType Name
{
get { return name; }
}

public TValueType Value
{
get { return value; }
}

public static TypeSafeEnum GetName(TNameType name)
{
TypeSafeEnum tse = null;
for (int i = 0; i < listEnums.Count; i++)
{
TypeSafeEnum typeSafeEnum = listEnums;
if (EqualityComparer.Default.Equals(typeSafeEnum.name, name))
{
tse = typeSafeEnum;
}
}
return tse;
}

public static TypeSafeEnum GetValue(TValueType value)
{
TypeSafeEnum tse = null;
for (int i = 0; i < listEnums.Count; i++)
{
TypeSafeEnum typeSafeEnum = listEnums;
if (EqualityComparer.Default.Equals(typeSafeEnum.value, value))
{
tse = typeSafeEnum;
}
}
return tse;
}

public static TNameType[] GetNames()
{
TNameType[] names = new TNameType[listEnums.Count];
for (int i = 0; i < listEnums.Count; i++)
{
TypeSafeEnum typeSafeEnum = listEnums;
names = typeSafeEnum.name;
}
return names;
}

public static TValueType[] GetValues()
{
TValueType[] values = new TValueType[listEnums.Count];
for (int i = 0; i < listEnums.Count; i++)
{
TypeSafeEnum typeSafeEnum = listEnums;
values = typeSafeEnum.value;
}
return values;
}
}

public abstract class StringEnum : TypeSafeEnum
{
protected StringEnum(string name, int value) : base(name, value)
{
}
}

public sealed class FileOptionEnum : StringEnum
{
public static readonly FileOptionEnum Name = new FileOptionEnum("Name", 0);
public static readonly FileOptionEnum Extension = new FileOptionEnum("Extension", 1);
public static readonly FileOptionEnum Size = new FileOptionEnum("Size", 2);
public static readonly FileOptionEnum LastModified = new FileOptionEnum("Last Modified", 3);
public static readonly FileOptionEnum LastOpened = new FileOptionEnum("Last Opened", 4);
public static readonly FileOptionEnum Created = new FileOptionEnum("Created", 5);

public FileOptionEnum(string name, int value) : base(name, value)
{
}
}


Вот как я это использую:

// if I omit this line it returns me empty array
FileOptionEnum @enum = FileOptionEnum.Name;
string[] names = FileOptionEnum.GetNames();
cbFileOptions.Items.AddRange(names);


Подробнее здесь: https://stackoverflow.com/questions/295 ... t-instance
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»