具有结构属性的接口是否会导致装箱?
Do interfaces with struct properties result in boxing?
假设我有一些结构和一些接口,除其他外,这些接口将该结构公开为 属性:
public struct MyStruct{
public readonly string Hello;
public MyStruct(string world){
Hello = world;
}
}
public interface IMyInterface{
MyStruct myStruct{ get; set; }
}
在我的应用程序中,创建了一个实现该接口的对象并将其传递给某个方法:
public void MyMethod(IMyInterface interface){
var structContents = interface.myStruct;
Console.WriteLine(structContents.Hello);
}
我的问题是:当我将该结构值打包到接口中并将其传递到我的应用程序时,该结构是否被装箱然后在我稍后在 MyMethod 中访问它时被取消装箱?或者在这种设计的幕后是否还有其他 boxing/unboxing 或其他问题?
根据 the docs:
Boxing is the process of converting a value type to the type object or to any interface type implemented by this value type.
你没有用 myStruct
做这些事情,所以这里没有装箱。
假设我有一些结构和一些接口,除其他外,这些接口将该结构公开为 属性:
public struct MyStruct{
public readonly string Hello;
public MyStruct(string world){
Hello = world;
}
}
public interface IMyInterface{
MyStruct myStruct{ get; set; }
}
在我的应用程序中,创建了一个实现该接口的对象并将其传递给某个方法:
public void MyMethod(IMyInterface interface){
var structContents = interface.myStruct;
Console.WriteLine(structContents.Hello);
}
我的问题是:当我将该结构值打包到接口中并将其传递到我的应用程序时,该结构是否被装箱然后在我稍后在 MyMethod 中访问它时被取消装箱?或者在这种设计的幕后是否还有其他 boxing/unboxing 或其他问题?
根据 the docs:
Boxing is the process of converting a value type to the type object or to any interface type implemented by this value type.
你没有用 myStruct
做这些事情,所以这里没有装箱。