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

2022-06-22T22:16:51+00:00
Вопросы с похожей тематикой, как у вопроса:

C#: создание экземпляра абстрактного класса без определения нового класса