gpt4 book ai didi

c# - 什么时候使用 C# 结构(值类型)会牺牲性能?

转载 作者:可可西里 更新时间:2023-11-01 07:53:17 26 4
gpt4 key购买 nike

我一直在玩弄结构作为隐式验证复杂值对象的机制,以及围绕更复杂类的通用结构以确保有效值。我对性能后果有点无知,所以我希望大家能帮助我。例如,如果我要执行类似将域对象注入(inject)值类型包装器之类的操作,这会导致问题吗?为什么?我理解值类型和引用类型之间的区别,我的目标是利用值类型的不同行为。为了负责任地做到这一点,我到底需要研究什么?

这是我正在考虑的事情的一个非常基本的想法。

public struct NeverNull<T>
where T: class, new()
{

private NeverNull(T reference)
{
_reference = reference;
}

private T _reference;

public T Reference
{
get
{
if(_reference == null)
{
_reference = new T();
}
return _reference;
}
set
{
_reference = value;
}
}

public static implicit operator NeverNull<T>(T reference)
{
return new NeverNull<T>(reference);
}

public static implicit operator T(NeverNull<T> value)
{
return value.Reference;
}
}

最佳答案

好吧,一件令人讨厌的事情是,这并不像您天真地期望的那样:

NeverNull<Foo> wrapper1 = new NeverNull<Foo>();
NeverNull<Foo> wrapper2 = wrapper1;

Foo foo1 = wrapper1;
Foo foo2 = wrapper2;

这将创建 Foo两个实例,因为在 wrapper1 创建实例之前复制了原始版本。

基本上,您正在处理一个可变结构 - 这几乎从来没有是一件好事。此外,我通常不热衷于隐式转换。

感觉就像您要在这里实现看起来很神奇的代码……我通常反对那种事情。 也许它对您的特定用例有意义,但我想不出我个人想在哪里使用它。

关于c# - 什么时候使用 C# 结构(值类型)会牺牲性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4399914/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com