wywołanie funkcji zadeklarowanej poza main

0

Jestem w trakcie odświeżania składni C# i natrafiłem na problem dotyczący wywoływania funkcji.
Oto kod:

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

namespace test
{
    class Program
    {
        public double dodaj(double a, double b)
        {
            return a + b;
        }
        static void Main(string[] args)
        {
            Console.WriteLine(dodaj(2, 1)); // funkcja dodaj nie jest wykrywana 
            Console.ReadLine();
        }
    }
}

W czym problem?

0

Zmieniłem deklarację funkcji dodaj() na statyczną - działa. Czyli aby to zadziałało w przypadku deklaracji jako public, musiałbym funkcję umieścić wewnątrz klasy czyniąc ją metodą?

3

public nie ma nic do static => mozesz zrobic np. public static void

aby uzyc non-static musisz utworzyc instancje np. var p = new Program().dodaj(1,2);

0

@kosmonauta80:
Jak wyżej @WeiXiao
https://stackoverflow.com/questions/1360183/how-do-i-call-a-non-static-method-from-a-static-method-in-c#1360191

You'll need to create an instance of the class and invoke the method on it.

2
WeiXiao napisał(a):

public nie ma nic do static => mozesz zrobic np. public static void

aby uzyc non-static musisz utworzyc instancje np. var p = new Program().dodaj(1,2);

Albo tak:

        class Program
        {
            double dodaj(double a, double b)
            {
                return a + b;
            }
            static void Main(string[] args)
            {
                new Program().Main2(args);
            }
            void Main2(string[] args)
            {
                Console.WriteLine(dodaj(2, 1));
                Console.ReadLine();
            }
        }
0

Już jasne. Nie wiedziałem po prostu jak zadeklarować tę instancję. Trochę to wszystko inne w porównaniu z C++ ;)

Tak też działa, tylko "niepotrzebnie" robię klasę:

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

namespace test
{
    class Program
    {
        class licz
        {
            public double dodaj(double a, double b)
            {
                return a + b;
            }
            public double mnoz(double a, double b)
            {
                return a * b;
            }
        }
        static void Main(string[] args)
        {
            licz kalkulator = new licz();
            Console.WriteLine(kalkulator.mnoz(2,3));
            Console.ReadLine();
        }
    }
}
0

Można też zadeklarować delegatę :)

2

Dokładnie tak samo działa jak w C++. Metoda statyczna (main) może wywoływać TYLKO metody statyczne i korzystać TYLKO ze zmiennych statycznych.

1 użytkowników online, w tym zalogowanych: 0, gości: 1