这不是一个真正的优化问题或任何东西。这本质上是一个到底是怎么回事的问题。单例模式用于多次使用对象的单个实例。这一切都很好,但是如果我尝试用结构做类似的模式,它不会得到一个实例。
我开始尝试Color
对System.Drawing
. 这是一些示例代码:
class Colors
{
private static Color _red;
public static Color Red
{
get
{
if (_red.IsEmpty)
_red = Color.FromArgb(0xFF, 0xFF, 0x42, 0x39);
return _red;
}
}
}
static void Main(string[] args)
{
var redOne = Colors.Red;
var redTwo = Colors.Red;
Console.WriteLine("redOne.Equals(redTwo) : {0}", redOne.Equals(redTwo));
Console.WriteLine("redOne == redTwo : {0}", redOne == redTwo);
Console.WriteLine("Object.Equals(redOne, redTwo) : {0}", Object.Equals(redOne, redTwo));
Console.WriteLine("Object.ReferenceEquals(redOne, redTwo) : {0}", Object.ReferenceEquals(redOne, redTwo));
Console.ReadLine();
}
输出是:
redOne.Equals(redTwo) : True
redone == redTwo : True
Object.Equals(redOne, redTwo) : True
Object.ReferenceEquals(redOne, redTwo) : False
前三个结果是意料之中的,但最后一个让我感到惊讶。现在,我最好的猜测是当_red
从Colors.Red
它返回时返回一个副本,就像普通值类型一样。因此,虽然只有一个 的实例_red
,但Colors.Red
返回一个全新的实例,这就是存储在 redOne 和 redTwo 中的内容。我的想法正确吗?
另外,如果这是正确的,static
在结构上使用关键字有什么意义吗?
谢谢