相关疑难解决方法(0)

何时使用struct?

什么时候应该在C#中使用struct而不是class?我的概念模型是当项只是值类型的集合时使用结构.一种逻辑上将它们组合在一起形成一个有凝聚力的整体的方法.

我在这里遇到了这些规则:

  • 结构应该表示单个值.
  • 结构应具有小于16个字节的内存占用.
  • 创建后不应更改结构.

这些规则有效吗?结构在语义上意味着什么?

c# struct

1347
推荐指数
23
解决办法
26万
查看次数

为什么System.Windows.Point和System.Windows.Vector是可变的?

鉴于可变结构通常被认为是邪恶的(例如,为什么可变结构"邪恶"?),是否有可能促使.NET框架的设计者制作System.Windows.PointSystem.Windows.Vector变异的潜在好处?

我想理解这一点,所以我可以决定是否有必要使我自己的类似结构变得可变(如果有的话).做出决定PointVector变异可能只是判断错误,但如果有充分理由(例如,表现好处),我想了解它是什么.

我知道我偶然发现了Vector.Normalize()几次该方法的实现,因为它,惊喜(!),并没有带来新鲜感Vector.它只是改变了当前的向量.

我一直认为它应该像这样工作:

var vector = new Vector(7, 11);
var normalizedVector = vector.Normalize(); // Bzzz! Won't compile
Run Code Online (Sandbox Code Playgroud)

但它实际上是这样的:

var vector = new Vector(7, 11);
vector.Normalize(); // This compiles, but now I've overwritten my original vector
Run Code Online (Sandbox Code Playgroud)

......所以,似乎不变性只是为了避免混淆是一个好主意,但同样,也许在某些情况下值得存在这种混淆.

.net c# struct mutable immutability

16
推荐指数
2
解决办法
3519
查看次数

如何在C#中创建公共const大小?

我正在尝试编写以下代码:

public const Size ImageSize = new Size() { Width = 28, Height = 28 };
Run Code Online (Sandbox Code Playgroud)

但我得到的错误Width,并Height是只读的.

建议的方法是什么?

.net c# const readonly

3
推荐指数
2
解决办法
2511
查看次数

C#结构应该只具有只读属性

我在读虽然关于在计算器上不纯的方法问题,在这里,它让我想起了结构设计的最佳实践.

阅读有关创建不可变结构的示例,此处属性仅定义为getter.

public DateTime Start { get { return start; } }
public DateTime End { get { return end; } }
public bool HasValue { get { return hasValue; } }
Run Code Online (Sandbox Code Playgroud)

其他地方的其他示例包括System.Drawing.Point属性中的getter和setter.

public int Y {
    get {
        return y;
    }
    set {
        y = value;
    }
}
Run Code Online (Sandbox Code Playgroud)

设计准则不指定,但他们都相当简洁.结构属性的推荐方法是什么?只读或允许写作?

c# struct

2
推荐指数
1
解决办法
1487
查看次数

标签 统计

c# ×4

struct ×3

.net ×2

const ×1

immutability ×1

mutable ×1

readonly ×1