Классы и объекты в C#?

1,00
р.
Подскажите, пожалуйста.
При создании экземпляра класса в C# выделяется память под него в управляемой куче, он может хранить в себе только не статические поля класса - это понятно, а где же хранятся методы и статика? На одном курсе на youtube смотрел видео, где человек рассказывал, что методы и статика хранится в объекте, но ведь я полагал, что экземпляр и объект одно и тоже? В Интерфейсе обязательно все методы реализовывать?

Ответ
Смотрите. Для начала, с точки зрения языка совершенно неважно, где именно хранятся переменные. Главное, чтобы они были доступны и имели правильную длину жизненного цикла. Вообще, само понятие стека и кучи не имеет особого смысла.
Теперь, с точки зрения имплементации в текущей версии Microsoft CLR, вопрос имеет смысл. Действительно, есть многие вспомогательные объекты, которые возникают во время работы программы. Например, статические переменные, объекты типов и тому подобное. Статические переменные располагаются в специальной области памяти, которая не доступна сборщику мусора, и с точки зрения ОС является кучей. (Эта область памяти называется «high frequency heap».)
Заметьте, что расположить статические переменные статическим образом, выделив под них память на этапе компиляции, невозможно по многим причинам. Например, для такого generic-класса на C#
class C { static T t }
тип статической переменной (а значит, и его размер) неизвестен во время компиляции. Кроме того, потенциальное количество разных T, с которыми будет инстанциирован C, бесконечно, и их список нельзя определить при помощи статического анализа (потому что в отличие от шаблонов C++, в .NET, список инстанциаций generic-типа не определяется на этапе компиляции, см. последний абзац здесь).
По поводу того, где хранятся методы в CLR — а где хранятся методы обыкновенных, нативных классов? В .NET все методы хранятся в IL-виде до пробега JIT (но не в .NET Native!), JIT при компиляции метода аллоцирует память для нативного кода.

По поводу второго пункта — да, если вы имеете в виду класс, реализующий интерфейс. Наоборот, если вы определяете интерфейс, то никаких методов при этом не реализуете. А какую вы видите альтернативу?