2016-06-23 11 views
0

Скажем, у меня есть структура и некоторый интерфейс, который, помимо всего прочего, предоставляет, что структура как свойство:Связаны ли интерфейсы со свойствами структуры в боксе?

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); 
} 

Мой вопрос: когда я упаковываю это значение STRUCT в интерфейс и передать его вокруг моего приложения, в том, что структура быть положенным в коробку, а затем быть Unboxed позже, когда я к нему доступ в MyMethod? Или есть какой-нибудь другой бокс/unboxing или другой вопрос, идущий за кулисами с таким дизайном?

+1

Нет, структуры как члены интерфейсов не помещаются в коробку. Структуры, назначенные переменной типа интерфейса, которые они реализуют, вставляются в коробку. – Lee

ответ

3

Пер the docs:

Бокс процесс преобразования типа значения к типу объекта или к любому типу интерфейса, реализуемого этого типа значения.

Вы не делаете ни одной из этих вещей с myStruct, так что здесь нет бокса.

+0

Отлично, вот что я подумал. Благодаря! –