Статические поля и свойства инициализируются в конструкторе типов независимо от того, как вы их пишете, поэтому оба значения:
static Resource()
{
Hydrogen = new Resource(1);
}
и
Hydrogen { get; } = new Resource(1);
- это одно и то же,Разница заключается в порядке инициализации, также это позволит вам вызывать статические функции, но в случае с OP это действительно не имеет значения, поэтому ответ pamcevoy не сработает.
Клаус предоставляет правильный способделать вещи, и это будет работать, просто вам нужно будет вызвать метод Initialize
перед вашим GetFromID
, по крайней мере, один раз, чтобы инициализировать все статические свойства класса Resource
, например:
Resource.Initialize();
InventoryItem.GetFromID(id);
Ваш последний вариант - сделать затенение метода, в основном добавьте к вашему классу Resource
тот же метод GetFromID
с оператором new
, а затем вызовите GetFromID
через класс Resource
, например,
public class Resource : InventoryItem
{
public static new InventoryItem GetFromID(int id)
{
return InventoryItem.GetFromID(id);
}
}
Но знайте, что затенение метода не то же самое, что переопределение метода, поэтому, если вы вызовете InventoryItem.GetFromID
, вы не будете вызывать Resource.GetFromID
. Это исключит необходимость вызова при запуске отдельного Initialize
метода в классе Resource
, но заставит вас хотя бы один раз вызвать GetFromID
через Resource
класс.
Обновление: в конце дня единственный способ инициализировать статические поля / реквизиты - получить доступ к тому или иному предмету в указанном классе.