【发布时间】:2020-11-14 02:43:42
【问题描述】:
我对编程和 C# 还很陌生,我正在使用 C# 9.0 创建一个游戏,其中 Entity 的所有实例都有特定的统计数据。我希望能够使用属性更改他们的私有数据字段,尽管我不完全确定属性是如何工作的。我知道它们在封装中作为 getter 和 setter 很有用。
上下文:
- 我正在尝试优化代码并尽可能减少内存使用量
- 字节字段
str应该是可变的(通过事件、培训等),但有“上限”和“下限”- 如果
dog.str= 253,那么dog.Str += 5;应该导致dog.str为255 - 如果
dog.str= 2,那么dog.Str -= 5;应该导致dog.str为0
- 如果
private byte str;
public short Str
{
get => str;
set
{
if (value > byte.MaxValue) str = byte.MaxValue; //Pos Overflow
else if (value < byte.MinValue) str = byte.MinValue; //Neg Overflow
else str = (byte)value;
}
}
问题:
-
由于该属性的数据类型为 Short,它是否会创建一个新的消耗内存的私有支持字段?还是
value/Str{set;}只是一个后来消失的局部变量?- 属性
public float StrMod {get => (float)(str*Effects.Power);}是否创建支持字段?只创建一个类似public float getStrMod()的方法会更好吗?
- 属性
-
这段代码是否最适合我想要实现的目标?考虑到以下几点,有没有更好的方法来做到这一点?
- 如果由于某种原因 Short 溢出(在这种情况下不太可能,但可能存在类似情况),那么我最终会遇到同样的问题。但是,如果额外的内存分配不是问题,那么我可以使用 int。
-
{get;}将返回一个 Short,这可能是也可能不是问题。
【问题讨论】:
标签: c# memory properties byte integer-overflow