проблема делегата, имя не существует в текущем контексте? - PullRequest
0 голосов
/ 06 апреля 2020

Я работаю со своим первым делегатом, но у меня есть небольшая проблема, не могли бы вы помочь мне, пожалуйста.

Я работаю с consoleApp в do tnet core 3.1

Я пытался измените идентификатор доступа на private в publi c, но без результата:

using System;

namespace _29_Delegate_Et_Lambda
{
  class Program
  {
    static void Main(string[] args)
    {
        Console.WriteLine("Working on Delegate");
        Console.WriteLine("-------------------");

        double resultatAddition;

        resultatAddition = ExecuterOperationDeMath(Additionner, 123, 43);

        Console.WriteLine(resultatAddition);
    }

    public class Calcul
    {
        //  1-  Creation delegate:
        delegate double OperationDeMath(double a, double b);

        // 2-  Declaration methode Additionner du meme type que le delegate.
        public static double Additionner(double a, double b) { return a + b; }

        // 2-  Declaration d'une methode Soustraction du meme type que le delegate.
        static double Soustraction(double a, double b) => a + b;

        //  3-  Utilisation delegate:
        static double ExecuterOperationDeMath(OperationDeMath operationAEffectuer, double a, double b)
        {
            return operationAEffectuer(a, b);
        }
    }
  }
}

Ответы [ 2 ]

0 голосов
/ 06 апреля 2020

Какую именно ошибку вы получаете? Для доступа к методу stati c необходимо указать имя класса. И все соответствующие методы должны быть public в классе.

public class Program
{
    public static void Main(string[] args)
    {
        Console.WriteLine("Working on Delegate");
        Console.WriteLine("-------------------");

        double resultatAddition;

        resultatAddition = Calcul.ExecuterOperationDeMath(Calcul.Additionner, 123, 43);

        Console.WriteLine(resultatAddition);
    }

    public class Calcul
    {
        //  1-  Creation delegate:
        public delegate double OperationDeMath(double a, double b);

        // 2-  Declaration methode Additionner du meme type que le delegate.
        public static double Additionner(double a, double b) { return a + b; }

        // 2-  Declaration d'une methode Soustraction du meme type que le delegate.
        public static double Soustraction(double a, double b) => a + b;

        //  3-  Utilisation delegate:
        public static double ExecuterOperationDeMath(OperationDeMath operationAEffectuer, double a, double b)
        {
            return operationAEffectuer(a, b);
        }
    }
}

Демо: https://dotnetfiddle.net/9RUXHc

Эти проблемы касаются модификаторов доступа, и Дон на самом деле не имеет ничего общего с делегатами.

NB. Как уже упоминали другие, также неясно, почему класс Calcul вложен в Program. Это относительно необычно и обычно не нужно. Но это не имеет прямого отношения к заданному вами вопросу.

0 голосов
/ 06 апреля 2020

Есть 2 способа решить эту проблему. Но сначала сделайте следующие изменения:

  1. Класс Calcul должен быть public static и не должен / не должен быть вложен в класс Program
  2. Сделать делегата опубликованным c в соответствии с доступностью метода
  3. Сделайте тоже Soustraction public static.

Есть два способа решения:

a. добавьте using static Calcul в начало вашего файла. Это открывает все методы stati c этого класса с вашим точным текущим синтаксисом. или;

б. Используйте имя класса перед каждым вызовом метода stati c ie Calcul.ExecuterOperationDeMath

Примеры в реальном времени:
a. https://dotnetfiddle.net/u78cOy
b. https://dotnetfiddle.net/2vRSnm

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...