Лучший способ объяснить мою проблему - использовать фрагмент кода:
enum Resource { ..., Size }
class ResourceVector
{
int[] values = new int[(int)Resource.Size];
public static ResourceVector operator + (ResourceVector a, ResourceVector b)
{...}
...
}
Мы используем этот тип везде, как будто это тип значения. То есть мы предполагаем, что:
ResourceVector b = a;
b += c;
не повлияет на a
, потому что именно так мы привыкли говорить о векторах (и именно так ведет себя вектор с фиксированным числом полей, если он реализован как структура).
Однако, так как это предположение неверно, оно привело к очень тонким ошибкам.
Мне интересно, есть ли способ заставить это вести себя как тип значения, кроме простого расширения членов Resource
каждого в свои собственные элементы в struct ResourceVector
(что требует прикосновения к каждому члену ResourceVector
если мы хотим добавить еще один Resource
).
О, на всякий случай, мы работаем с C # 2.0. Так что никаких модных штанов нет: -)
Спасибо.