我想重用来自第三方库的现有类
,但它没有实现某些必需的接口(interface)。我正在考虑将它包装在 struct
中以实现所需的接口(interface)(基本上就像 Scala 的做法一样)。对于这个用例,我更喜欢 struct
而不是 class
的原因是因为它只存储一件事:包装对象,而且它可能不会导致性能损失?但是我不确定如果我将 struct
传递给某个接受接口(interface)的方法是否会发生装箱?这种方法还有其他缺点吗?
最佳答案
对于应该使用 struct
而不是 class
的问题,Microsoft 给出了非常明确和直接的理由:
√ 如果类型的实例很小并且通常是短暂的或者通常嵌入到其他对象中,请考虑定义结构而不是类。
X 避免定义结构,除非该类型具有所有以下特征:
- 它在逻辑上表示单个值,类似于基本类型(int、double 等)。
- 实例大小小于 16 字节。
- 它是不可变的。
- 不必经常装箱。
https://msdn.microsoft.com/en-us/library/ms229017.aspx
而且您的情况似乎并非如此。顺便说一句,是的,如果您将 struct
传递给采用 interface
的方法,则会发生装箱。还要考虑到结构不支持继承并且它们不能具有显式无参数构造函数。
关于c# - 在 C# 中,我应该使用 struct 来包装一个对象以实现额外的接口(interface)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19043682/