我已经阅读了各地const和static readonly各个领域.我们有一些只包含常量值的类.用于我们系统中的各种事物.所以我想知道我的观察结果是否正确:
这些常量值是否应始终static readonly适用于所有公开的内容?并且仅const用于内部/受保护/私有值?
您有什么推荐的吗?我是否可能甚至不使用static readonly字段,而是使用属性?
代码非常自我解释.我预计当我创建a1并b1创建两个包含相同文本的不同字符串实例时.所以我a1 == b1认为这是真的但是object.ReferenceEquals(a1,b1)会是假的,但事实并非如此.为什么?
//make two seemingly different string instances
string a1 = "test";
string b1 = "test";
Console.WriteLine(object.ReferenceEquals(a1, b1)); // prints True. why?
//explicitly "recreating" b2
string a2 = "test";
string b2 = "tes";
b2 += "t";
Console.WriteLine(object.ReferenceEquals(a2, b2)); // prints False
//explicitly using new string constructor
string a3 = new string("test".ToCharArray());
string b3 = new string("test".ToCharArray());
Console.WriteLine(object.ReferenceEquals(a3, b3)); // prints False
Run Code Online (Sandbox Code Playgroud) 深入了解C#,我遇到了一个与对象引用相等的小问题.我说我有两个字符串:
String a = "Hello world!";
String b = "Bonjour le monde";
bool equals = ReferenceEquals(a, b); // ******************* (1)
b = "Hello world!";
equals = ReferenceEquals(a, b); // ******************* (2)
Run Code Online (Sandbox Code Playgroud)
(1)是false和那是预期的.ReferenceEquals 文档说
ReferenceEquals比较实例
但是之后:
true?a和b它们不是同一个对象吗?如果是,那么它们是如何变得相同的,因为我从未明确地做过a=b考虑C#中的以下代码片段
string s = "hi";
object k="hi".Substring(0);
// 1>
k==s // true
// 2>
Object.ReferenceEquals(s,k) //true
Run Code Online (Sandbox Code Playgroud)
但当,
Object k="hii".Substring(0,2);
// 1>
k==s // false
// 2>
Object.ReferenceEquals(s,k) //false
Run Code Online (Sandbox Code Playgroud)
我很难理解为什么在第一种情况下,字符串被实习,而在第二种情况下没有发生.如果有人在c#中发生字符串实习时可以指出规则,那将是非常有帮助的.