为什么System.String像值类型一样?(如何写类似字符串的值类型?)

sor*_*h-r 2 .net c#

我想写一个行为类似于Value Type的'Date'类.例如,不要编写克隆方法来安全地设置属性,而是使Date类按值传递:

public Date Birthday
        {
            get { return this.birthday; }
            set 
            { 
               this.birthday = value.Clone(); 
            } //I want to write this.birthday = value; 
              //without changing external value when this.Birthday changes
        }
Run Code Online (Sandbox Code Playgroud)

我知道这是可能的,因为System.String是一个类,其行为类似于一个值.例如:

String s1 = "Hello";
String s2 = "Hi";
s1 = s2;
s2="Hello";
Console.WriteLine(s1);  //Prints 'Hi'
Run Code Online (Sandbox Code Playgroud)

首先我认为这个类的编写器覆盖'='运算符,但现在我知道'='运算符不能被覆盖.那他们怎么写String类?

编辑:我只想让我的Date类按值传递它的实例,比如String.

Ant*_*lev 7

首先,string基于您的示例并未说明您的问题.

用的东西DateTimeString是他们不变的:一旦创建一个实例,它不能以任何方式改变.例如,您只能DateTime通过以下方式向实例添加2分钟date.Minutes += 2:您必须调用date.AddMinutes(2),这将产生一个全新的实例.

要使对象成为只读,只需遵循相同的模式.

  • @tc究竟`DateTime`是多么可变? (3认同)