C# 在结构中使用方法有什么意义?
一般来说,结构应该用作代码中的写/写块。当方法放置在一个结构中时,CLR将以某种方式将其作为类(?)处理 所以,只定义一个结构,然后定义一个包含类中所有方法和结构的类不是更好吗C# 在结构中使用方法有什么意义?,c#,.net,C#,.net,一般来说,结构应该用作代码中的写/写块。当方法放置在一个结构中时,CLR将以某种方式将其作为类(?)处理 所以,只定义一个结构,然后定义一个包含类中所有方法和结构的类不是更好吗 我相信C允许这样做是有原因的。结构是值类型,类是引用类型。这就是最大的区别 看看这个: public struct MyStruct { public string Name { get; set; } } 当您将一个结构分配给另一个变量时,将创建一个副本,因此您有两个结构实例。对于类,您将修改这两个变量,因
我相信C允许这样做是有原因的。结构是值类型,类是引用类型。这就是最大的区别 看看这个:
public struct MyStruct
{
public string Name { get; set; }
}
当您将一个结构分配给另一个变量时,将创建一个副本,因此您有两个结构实例。对于类,您将修改这两个变量,因为它们都引用同一个实例
这就是主要的区别。除此之外,它们是相似的。您可以在这两种语言中使用方法、属性、事件等。在结构中使用方法没有什么错
但由于结构不应该是可变的(应该有只读属性),大多数“修改”的方法都会返回一个新的结构实例(比如f.e.)
您有以下两种类型的成员:
- 田地
- 常数
- 性质
- 方法
- 建设者
- 事件
- 索引器
- 操作员
- 嵌套类型
double
上实现ToString
?@MarcHPunkt-为什么你认为方法会导致装箱?Stucts可以简单地包含方法,这些方法非常基本、有用、支持良好,从一开始就存在并设计好。@MarcHPunkt我想你会有兴趣阅读这篇文章:结构不能有终结器。“不应该是可变的”-仅当它们带有值语义时。但这个“可变结构是邪恶的”主题有点反应过度。例如,C#7中新的ValueTuple
类型也是结构。它们是可变的。他们有可分配的公共领域。太可怕了,不是吗?枚举数通常也是结构。因为结构的变异速度非常快(除非它们被装箱到一个接口中,比如IEnumerator
)。@taffer:你们说得对,是因为缺少msdn的文档(结构可以有终结器)。@taffer:也许你们说得对,但这是struct
应该是不可变的。是的,我喜欢那个条准则,特别是16字节限制部分。:)但说真的,你是对的,这也是我在价值语义学中提到的。
MyStruct s = new MyStruct();
s.Name = "Foo";
MyStruct s2 = s;
s2.Name = "Bah";
Console.Write("Name of MyStruct s: " + s.Name); // Foo not Bah