interface IMyInterface { }
struct MyStruct : IMyInterface { }
class MyClass
{
public void Method(IMyInterface value){ }
}
Вопрос №1: Будет упаковка структуры при передачи в метод Method()?
Вопрос №2: Как избежать упаковки?
interface IMyInterface { }
struct MyStruct : IMyInterface { }
class MyClass
{
public void Method(IMyInterface value){ }
}
Вопрос №1: Будет упаковка структуры при передачи в метод Method()?
Вопрос №2: Как избежать упаковки?
На собеседованиях я не раз задавал вопрос: «В каких случаях вы предпочтёте использование структуру вместо класса?». 90% людей, почему-то думают, что их спрашивают о различиях структур и классов. И поэтому начинают рассказывать о том где хранятся значимые и ссылочные типы, о невозможность наследования структур и т. п. Хотя они говорят всё верно, но это не совсем то, что их спрашивают. В этой заметке я попытаюсь ответить на поставленный вопрос.
Вот представьте себе, начинает кто-то работать .Net программистом. Изучает хорошо основы языка C#, разбирается с различиями значимых и ссылочных типов, даже хорошо понимает работу Garbage Collector'а и зачем нужны эфемерные сегменты. А спустя долгие годы, если с чем-то ему не приходится сталкиваться ежедневно, то оно напрочь забывается. Я легко могу представить, как веб-разработчик забудет синтаксис объявления событий – ведь они практически не используются в stateless парадигме веб-проектов. Если, по каким-то причинам, вы забыли эти особенности, то прошу под кат.
Для тех, кто обладает феноменальной памятью и с первого раза запомнил всё, что дядюшка Рихтер написал про многопоточность в библии дотнетчика, тот может смело пропустить этот пост. Но для большинства людей пару-тройку интересных моментов всё-таки надеюсь найдётся.