В C #, если вы определяете свой «объект» как struct
, он имеет значение семантическое.Если вы определите его как class
, он имеет ссылочную семантику (если вы не сделаете его неизменным, как string
, тогда его семантика будет больше похожа на значение 1).
Я добавлю, что это довольнолегко сломать эту «неявную» семантику.
struct MyStruct
{
public StringBuilder SB;
}
MyStruct a = new MyStruct();
a.SB = new StringBuilder();
MyStruct b = a;
теперь вы нарушили семантику, потому что и a
, и b
«указывают» на одну и ту же ссылку.