Подтвердить что ты не робот

С# Создание и использование функций

Мне нужна помощь в программировании на С#; Я новичок в этом, и я родом из C. У меня есть консольное приложение, подобное этому:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Add_Function
{
   class Program
   {
      static void Main(string[] args)
      {
         int a;
         int b;
         int c;

         Console.WriteLine("Enter value of 'a':");
         a = Convert.ToInt32(Console.ReadLine());

         Console.WriteLine("Enter value of 'b':");
         b = Convert.ToInt32(Console.ReadLine());

         //why can't I not use it this way?
         c = Add(a, b);
         Console.WriteLine("a + b = {0}", c);
      }//END   Main

      public int Add(int x, int y)
      { 
         int result = x + y;
         return result;
      }//END   Add
   }//END      Program
}//END         Add_Function

Это дает мне эту ошибку в строке, которую я вызываю Add():

Ссылка на объект требуется для нестатического поля, метода или свойства 'Add_Function.Program.Add(int, int)'

Может кто-нибудь объяснить мне, почему у меня есть эта проблема. Это потому, что архитектура С# отличается от C, и то, как я ее называю, неверно? Спасибо.

4b9b3361

Ответ 1

Примечание: в С# термин "функция" часто заменяется термином "метод". Ради этого вопроса нет разницы, поэтому я просто использую термин "функция".

Другие ответы уже дали вам быстрый способ исправить вашу проблему (просто сделайте Add a static), но я хотел бы объяснить, почему.

С# имеет принципиально другую конструктивную парадигму, чем C. Эта парадигма называется объектно-ориентированным программированием (ООП). Объяснение всех различий между ООП и функциональным программированием выходит за рамки этого вопроса, но здесь короткая версия, применимая к вам.

Написав вашу программу на C, вы создали бы функцию, которая добавляет два числа, и эта функция будет существовать независимо и быть вызываемой из любого места. В С# большинство функций не существуют независимо; вместо этого они существуют в контексте объекта. В вашем примере кода только экземпляр (объект) класса Program знает, как выполнить Add. С другой стороны, вам нужно создать экземпляр Program, а затем попросить Program выполнить Add для вас.

Решения, которые люди дали вам, используя ключевое слово static, маршрутизируют этот проект. Использование ключевого слова static похоже на высказывание: "Эй, эта функция, которую я определяю, не нуждается в каком-либо контексте/состоянии, ее можно просто вызвать". Поскольку ваша функция Add очень проста, это имеет смысл. Когда вы начинаете погружаться глубже в ООП, вы обнаружите, что ваши функции усложняются и полагаются на знание своего состояния/контекста.

Мой совет: возьмите книгу ООП и приготовьтесь переключить свой мозг от функционального программирования к программированию ООП. Вы катаетесь.

Ответ 2

Вы должны либо сделать свою Add функцию static так:

static public int Add(int x, int y)
{ 
    int result = x + y;
    return result;
 } //END   Add

static означает, что функция не зависит от экземпляра класса. Поэтому вы можете вызвать его, не создавая экземпляр класса Program.

или вы должны создать экземпляр класса Program, а затем вызвать Add в этом экземпляре. Например:

Program prog = new Program();
prog.Add(5,10);

Ответ 3

Этот код дает вам ошибку, потому что ваша функция Add должна быть static:

static public int Add(int x, int y)

В С# существует различие между функциями, которые работают с экземплярами (нестатическими) и функциями, которые не работают с экземплярами (статические). Функции экземпляра могут вызывать другие функции экземпляра и статические функции, поскольку они имеют неявную ссылку на экземпляр. Напротив, статические функции могут вызывать только статические функции, иначе они должны явно предоставить экземпляр для вызова нестатической функции.

Так как public static void Main(string[] args) является статическим, все функции, которые он вызывает, также должны быть статическими.

Ответ 4

Поскольку ваша функция представляет собой экземпляр или нестационарную функцию, вы должны сначала создать объект.

Program p=new Program();
p.Add(1,1)

Ответ 5

Что говорит эта ошибка сборки, вам нужно либо иметь экземпляр Program, либо сделать Add static.

Ответ 6

Примечание: в С# термин "функция" часто заменяется термином "метод". Ради этого вопроса нет разницы, поэтому я просто использую термин "функция" .

Это не так. вы можете прочитать о (func type + Lambda expressions), (анонимная функция "с использованием типа делегатов" ), (тип действия + выражения лямбда), (тип Predicate + лямбда-выражения). и т.д... и т.д... это будет работать.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {

           int a;
           int b;
           int c;

           Console.WriteLine("Enter value of 'a':");
           a = Convert.ToInt32(Console.ReadLine());

           Console.WriteLine("Enter value of 'b':");
           b = Convert.ToInt32(Console.ReadLine());

           Func<int, int, int> funcAdd = (x, y) => x + y;
           c=funcAdd.Invoke(a, b);
           Console.WriteLine(Convert.ToString(c));

        }

     }
}

Ответ 7

Просто создайте функцию Add static, добавив ключевое слово static следующим образом:

public static int Add(int x, int y)

Ответ 8

Причина, по которой у вас возникла ошибка, заключается в том, что ваша функция добавления определена после того, как вы ее использовали в основном, если бы вы создали прототип функции перед тем, как выложить над ним с помощью public int Add(int x, int y);, или вы можете просто скопировать и вставить весь текст Add выше главной причины main, где компилятор запускает выполнение, поэтому не имеет смысла объявлять и определять функцию до того, как вы ее используете, надеюсь, что это поможет.: D

Ответ 9

вы должны сделать так, чтобы вы были статичными как

namespace Add_Function
{
  class Program
  {
    public static void(string[] args)
    {
       int a;
       int b;
       int c;

       Console.WriteLine("Enter value of 'a':");
       a = Convert.ToInt32(Console.ReadLine());

       Console.WriteLine("Enter value of 'b':");
       b = Convert.ToInt32(Console.ReadLine());

       //why can't I not use it this way?
       c = Add(a, b);
       Console.WriteLine("a + b = {0}", c);
    }
    public static int Add(int x, int y)
    {
        int result = x + y;
        return result;
     }
  }
}

вы можете сделать Program.Add вместо Add вы также можете создать новый экземпляр программы, следуя этим

Program programinstance = new Program();

Ответ 10

static void Main(string[] args)
    {
        Console.WriteLine("geef een leeftijd");
        int a = Convert.ToInt32(Console.ReadLine());

        Console.WriteLine("geef een leeftijd");
        int b = Convert.ToInt32(Console.ReadLine());

        int einde = Sum(a, b);
        Console.WriteLine(einde);
    }
    static int Sum(int x, int y)
    {
        int result = x + y;
        return result;
    }

Ответ 11

static void Main(string[] args)
    {
        Console.WriteLine("geef een leeftijd");
        int a = Convert.ToInt32(Console.ReadLine());

        Console.WriteLine("geef een leeftijd");
        int b = Convert.ToInt32(Console.ReadLine());

        int einde = Sum(a, b);
        Console.WriteLine(einde);
    }
    static int Sum(int x, int y)
    {
        int result = x + y;
        return result;