C#: создание экземпляра абстрактного класса без определения нового класса
С помощью лямб-выражений abstract и инициализаторов классов csharp вы можете добиться того же c#.net поведения, приложив немного c-sharp усилий.
public class Example {
public Action DoStuff;
public Action DoStuffWithParameter;
public Func DoStuffWithReturnValue;
}
class Program {
static void Main(string[] args) {
var x = new Example() {
DoStuff = () => {
Console.WriteLine("Did Stuff");
},
DoStuffWithParameter = (p) => {
Console.WriteLine("Did Stuff with parameter " + p);
},
DoStuffWithReturnValue = () => { return 99; }
};
x.DoStuff();
x.DoStuffWithParameter(10);
int value = x.DoStuffWithReturnValue();
Console.WriteLine("Return value " + value);
Console.ReadLine();
}
}
Одна проблема с этим c# решением, которую я только c# что понял, заключается в csharp том, что если вы создадите anonymous-class поля в классе Example, лямбда-выражения c#.net не смогут получить доступ anonymous-class к этим полям.
Однако нет причин, по c#.net которым вы не могли бы передать c# экземпляр Example в лямбда-выражения, которые c#.net предоставили бы им доступ abstract к любому общедоступному состоянию, которое csharp может содержать этот пример. AFAIK, который abstract-classes был бы функционально эквивалентен abstract-classes анонимному внутреннему классу c#-language Java.
P.S. Если вы собираетесь c#-language проголосовать за ответ, сделайте anonymous-class нам всем одолжение и добавьте c#.net комментарий, почему вы не abstract-class согласны :-)
c#
abstract-class
abstract
anonymous-class
C#: создание экземпляра абстрактного класса без определения нового класса
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.