C# 在结构中使用方法有什么意义?

C# 在结构中使用方法有什么意义?,c#,.net,C#,.net,一般来说,结构应该用作代码中的写/写块。当方法放置在一个结构中时,CLR将以某种方式将其作为类(?)处理 所以,只定义一个结构,然后定义一个包含类中所有方法和结构的类不是更好吗 我相信C允许这样做是有原因的。结构是值类型,类是引用类型。这就是最大的区别 看看这个: public struct MyStruct { public string Name { get; set; } } 当您将一个结构分配给另一个变量时,将创建一个副本,因此您有两个结构实例。对于类,您将修改这两个变量,因

一般来说,结构应该用作代码中的写/写块。当方法放置在一个结构中时,CLR将以某种方式将其作为类(?)处理

所以,只定义一个结构,然后定义一个包含类中所有方法和结构的类不是更好吗


我相信C允许这样做是有原因的。

结构是值类型,类是引用类型。这就是最大的区别

看看这个:

public struct MyStruct
{
    public string Name { get; set; }
}

当您将一个结构分配给另一个变量时,将创建一个副本,因此您有两个结构实例。对于类,您将修改这两个变量,因为它们都引用同一个实例

这就是主要的区别。除此之外,它们是相似的。您可以在这两种语言中使用方法、属性、事件等。在结构中使用方法没有什么错

但由于结构不应该是可变的(应该有只读属性),大多数“修改”的方法都会返回一个新的结构实例(比如f.e.)

您有以下两种类型的成员:

  • 田地
  • 常数
  • 性质
  • 方法
  • 建设者
  • 事件
  • 索引器
  • 操作员
  • 嵌套类型

您是否曾经使用?如果是这样的话,那就是你的答案。“一般来说,结构应该被用作代码中的写/写块”-我不明白你的意思,也不明白你的想法是什么。@MarcHPunkt如果没有方法,你会如何在
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