Примечание. Я знаю, что на практике это ужасная идея; Мне просто интересно, что CLR позволяет вам делать, с целью создания своего рода "модифицировать класс после создания" препроцессора.
Предположим, у меня есть следующий класс, который был определен в другой сборке, поэтому я не могу его изменить.
class Person {
public string Greet() => "Hello!";
}
Теперь я определяю интерфейс и метод, например:
interface IGreetable {
string Greet();
}
// ...
void PrintGreeting(IGreetable g) => Console.WriteLine(g.Greet());
Класс Person
не реализует реализацию IGreetable
, но он может обойтись без каких-либо изменений в его методах.
Таким образом, есть ли какой-либо способ, используя Reflection, DLR или что-нибудь еще, в котором экземпляр Person
может успешно передаваться в PrintGreeting
без изменения какого-либо из вышеперечисленного кода?