brd*_*lph 9 c# struct boxing interface class
我想在C#中创建一个类似语义的类型.它是不可变的,内存占用少.但是,它主要通过它实现的接口访问.在这种情况下,必须将值类型装箱,这意味着必须将实际值从堆栈复制到堆中.因此,我想知道使用值类型(struct)而不是引用类型(类)是否有任何优势?
为了说明我的情况,我提供了一个接口下面的例子I与实现ReferenceTypeImplementation和ValueTypeImplementation:
interface I
{
int GetSomeInt();
}
class ReferenceTypeImplementation : I
{
public readonly int i;
public ReferenceTypeImplementation (int i)
{
this.i = i;
}
public int GetSomeInt()
{
return i*2;
}
}
struct ValueTypeImplementation : I
{
public readonly int i;
public ValueTypeImplementation (int i)
{
this.i = i;
}
public int GetSomeInt()
{
return i*2;
}
}
Run Code Online (Sandbox Code Playgroud)
我会使用的界面几乎完全使用这些类型的I像
I i1 = new ReferenceTypeImplementation(1);
I i2 = new ValueTypeImplementation(1);
Run Code Online (Sandbox Code Playgroud)
使用ValueTypeImplementation结束有什么好处ReferenceTypeImplementation吗?
Ree*_*sey 10
使用ValueTypeImplementation而不是ReferenceTypeImplementation有什么优势吗?
如果你打算通过界面使用它,那就没有了.正如您所提到的,这将打包值类型,从而抵消任何潜在的性能提升.
此外,您预期的主要用法将通过接口这一事实表明您期望引用语义,这再次表明class在这种情况下更合适.