具有struct属性的接口会导致装箱吗?

时间:2016-06-23 15:51:05

标签: c# clr 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中访问它时将其取消装箱?或者是否有任何其他拳击/拆箱或其他问题在幕后进行这样的设计?

1 个答案:

答案 0 :(得分:3)

the docs

  

Boxing是将值类型转换为对象类型或由此值类型实现的任何接口类型的过程。

你没有用extension YourViewController: UIImagePickerControllerDelegate { func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage, editingInfo: [String : AnyObject]?) { // Whatever you want here self.pickedImage = image picker.dismissViewControllerAnimated(true, completion: nil) } } 做任何一件事,所以这里没有拳击。