statyczna metoda Main jak wywolac normalna metode

Odpowiedz Nowy wątek
2019-09-17 20:34
0

Hej, mam sobie program gdzie jest pnkt wejscia

 class Program
    {
        Figura figura;

        static void Main(string[] args)
        {

            init();

        }

private void init()
        {
            Console.WriteLine("dupa");
        }

no i wywala blad bo main jest statyczny a chyba musi byc?
Jak z tego wywolac jakas normalna metode init zeby zainicjowac program, przecież wszystko nie moze byc ststyczne... Szukam i szukam i znalezc nie moge:/

edytowany 1x, ostatnio: goku21, 2019-09-17 20:34

Pozostało 580 znaków

2019-09-17 20:44

Statyczna metoda Main() jest pierwszą metodą jaka zostaje wywołana w twoim programie. Metoda ta jest statyczna, ponieważ można ją wywołać bez tworzenia obiektu. Na logikę rzecz biorąc nie możesz utworzyć obiektu przed uruchomieniem programu. Stwórz osobną klasę, której metody nie są statyczne i wtedy będziesz mógł używać "niestatycznych" metod.

class Program
{
    Figura figura;

    static void Main(string[] args)
    {
        MojaKlasa mk = new MojaKlasa();
        mk.init();
    }
}

public class MojaKlasa
{
   public void init()
   {
      Console.WriteLine("dupa");
   } 
}

Pozostało 580 znaków

2019-09-17 20:47
0

no i wywala blad bo main jest statyczny a chyba musi byc?

Musi.

Jak z tego wywolac jakas normalna metode init zeby zainicjowac program, przecież wszystko nie moze byc ststyczne... Szukam i szukam i znalezc nie moge:/

No, nie powinno.

Ale nie powinno się też trzymać wszystkiego w jednej klasie. Możesz użyć klasy Program tylko jako punktu wejścia aplikacji, a już w nim stworzyć obiekt swojej klasy i na nim działać.


class MyFunctions
{
    public void Init()
    {
        // robienie czegoś
    }
}

class Program
{
    static void Main()
    {
        var mf = new MyFunctions();
        mf.Init();
    }
}
Ech, 2 minuty spóźnienia. - Ktos 2019-09-17 20:47
Pierwszy! :D - AdamWox 2019-09-17 20:51

Pozostało 580 znaków

2019-09-17 20:56
2
goku21 napisał(a):

Jak z tego wywolac jakas normalna metode init zeby zainicjowac program, przecież wszystko nie moze byc ststyczne...

A dlaczego wszystko nie może być statyczne? jaką masz korzyść tutaj że init będzie niestatyczne?


Pozostało 580 znaków

2019-09-17 23:37
0

Pochodze z ActionScripta gdzie Konstruktory nie byly statyczne stad to pytanie;]
"A dlaczego wszystko nie może być statyczne? jaką masz korzyść tutaj że init będzie niestatyczne?"
Rozumiem ze jezeli w grze masz miniguna ktory strzela 1000x/sek to kazdy pocisk bedzie statyczna klasa?:> niezle podejscie;]

AdamWox dzieki za odpowiedz tylko to sie wydaje dziwne bo wymusza na kazdej klasie bazowej operator static, to nie jest dziwne waszym zdaniem? Czemu akurat klasa bazowa musi byc w C# statyczna, w innych jezykach to jest rozwiazane inaczej.

Pozostało 580 znaków

2019-09-18 00:35
0
goku21 napisał(a):

Pochodze z ActionScripta gdzie Konstruktory nie byly statyczne stad to pytanie;]

Jeśli konstruktory nie byłyby statyczne, to byłyby instancyjne, a więc mogłyby być wywołane jedynie na rzecz już istniejącej instancji klasy, której by nie było, bo do utworzenia przecież potrzebny jest konstruktor. Ergo, w takim języku nie dałoby się niczego napisać.

I ciekawe, że przywołujesz tutaj temat konstruktorów, przecież w swoim kodzie nie masz żadnego.

AdamWox dzieki za odpowiedz tylko to sie wydaje dziwne bo wymusza na kazdej klasie bazowej operator static, to nie jest dziwne waszym zdaniem? Czemu akurat klasa bazowa musi byc w C# statyczna, w innych jezykach to jest rozwiazane inaczej.

Nie wiem skąd czerpiesz takie informacje. Nie jest to prawdą, w C# klasy bazowe nie tylko nie muszą, ale nawet nie mogą być statyczne.
A poza tym w swoim kodzie nie masz ani jednej klasy bazowej.


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."

Pozostało 580 znaków

2019-09-18 01:01
0

Jeśli konstruktory nie byłyby statyczne, to byłyby instancyjne, a więc mogłyby być wywołane jedynie na rzecz już istniejącej instancji klasy

Moze to initializer jak w Pythonie


01010100 01110101 01110100 01100001 01101010 00100000 01101110 01101001 01100101 00100000 01101101 01100001 00100000 01101110 01101001 01100011 00100000 01100011 01101001 01100101 01101011 01100001 01110111 01100101 01100111 01101111 00101110 00100000 01001001 01100011 00100000 01110011 01110100 01101111 01101110 01110100 00101110
No może, ale initializer to chyba nie konstruktor w takim razie. - somekind 2019-09-18 01:02
No tak tak - stivens 2019-09-18 01:03
Druga sprawa ze OP prawdopodobnie rzuca losowymi haslami - stivens 2019-09-18 01:04

Pozostało 580 znaków

2019-09-18 07:51
0
goku21 napisał(a):

Pochodze z ActionScripta gdzie Konstruktory nie byly statyczne stad to pytanie;]
"A dlaczego wszystko nie może być statyczne? jaką masz korzyść tutaj że init będzie niestatyczne?"
Rozumiem ze jezeli w grze masz miniguna ktory strzela 1000x/sek to kazdy pocisk bedzie statyczna klasa?:> niezle podejscie;]

AdamWox dzieki za odpowiedz tylko to sie wydaje dziwne bo wymusza na kazdej klasie bazowej operator static, to nie jest dziwne waszym zdaniem? Czemu akurat klasa bazowa musi byc w C# statyczna, w innych jezykach to jest rozwiazane inaczej.

@goku21
Faktycznie, aż mnie ciekawi skąd ty to bierzesz? Main() nie jest konstruktorem, nie potrzebujesz tej metody w każdej klasie, nie potrzebujesz mieć wszystkich klas statycznych, wręcz powiedziałbym, że nie powinieneś mieć. Klasa bazowa w C# nie jest statyczna, tylko jej metoda Main() jest, aby można było wywołać ją

Program.Main();

zamiast

Program p = new Program(); 
p.Main();

Klasy niestatyczne mogą zawierać statyczne metody i właściwości

public class MojaKlasa

public MojaKlasa()
{
   //konstruktor, który nie jest statyczny
}

public void Init()
{
   //metoda niestatyczna
}

public static void init_static()
{
   //metoda statyczna
}

Jeśli chcesz się odwołać do Init() musisz mieć obiekt tej klasy, jeśli zaś chcesz się odwołać do init_static() to tego obiektu nie potrzebujesz.

MojaKlasa m = new MojaKlasa();
m.init();

MojaKlasa.init_static();
Program to nie jest klasa bazowa. Tzn. nie musi być. - somekind 2019-09-18 12:08
Wytłumacz to komuś kto przerzucił się z ActionScript na C# - AdamWox 2019-09-18 12:14

Pozostało 580 znaków

2019-09-18 12:02
0
Kamil Żabiński napisał(a):
goku21 napisał(a):

Jak z tego wywolac jakas normalna metode init zeby zainicjowac program, przecież wszystko nie moze byc ststyczne...

A dlaczego wszystko nie może być statyczne? jaką masz korzyść tutaj że init będzie niestatyczne?

Wiem czym sie rozni statyczny od dynamicznego:> Hmm myslalem ze main to konstruktor ale faktycznie klasa nie jest oznaczona jako statyczna ale czy konstruktor sie wywola sam z siebie? Zaraz poeksperymentuje.

somekind na zdrowy rozum masz racje, gdzies musialby byc tworzony obiekt zeby klasa wejsciowa nie musiala byc statyczna ale W ACTIONSCRIPT 3.0 wlasnie tak to dziala. Jest Main ktory nie jest statyczny i wywoluje sie od razu po rozpoczeciu dzialania programu. Moze flashplayer inicializuje obiekt takiej klasy ktory jednoczesnie jest singletonem, tego nie wiem. Mam natomiast pewnosc ze klasa wejsciowa w as 3 NIE JEST statyczna.

somekind

Nie wiem skąd czerpiesz takie informacje. Nie jest to prawdą, w C# klasy bazowe nie tylko nie muszą, ale nawet nie mogą być statyczne.
A poza tym w swoim kodzie nie masz ani jednej klasy bazowej.>

Zainstalowalem visual studio 2017, utworzylem projekt klasyczny w C# (aplikacja konsoli .NET) i dostalem

class Program
    {

        static void Main(string[] args)
        {

        }
}

Z tego powodu zakladam ze jest to klasa bazowa (innej nie ma i pierwsza sie uruchamia) oraz jak widze jest statyczna:> Jezeli usune wyraz static z metody Main dostaje blad:

Program nie zawiera statycznej metody „Main” odpowiedniej jako punkt wejścia CSharp>
Z tego powodu zakladam ze klasy bazowe w C# musza byc statyczne.

edytowany 3x, ostatnio: goku21, 2019-09-18 12:13

Pozostało 580 znaków

2019-09-18 12:15
1

Klasa ani nie jest bazowa bo zadna inna klasa po niej nie dziedziczy ani nie jest statyczna tylko ma metode statyczna


01010100 01110101 01110100 01100001 01101010 00100000 01101110 01101001 01100101 00100000 01101101 01100001 00100000 01101110 01101001 01100011 00100000 01100011 01101001 01100101 01101011 01100001 01110111 01100101 01100111 01101111 00101110 00100000 01001001 01100011 00100000 01110011 01110100 01101111 01101110 01110100 00101110

Pozostało 580 znaków

2019-09-18 12:18
0
goku21 napisał(a):

Wiem czym sie rozni statyczny od dynamicznego:> Hmm myslalem ze main to konstruktor ale faktycznie klasa nie jest oznaczona jako statyczna ale czy konstruktor sie wywola sam z siebie? Zaraz poeksperymentuje.

Main to nie jest żaden konstruktor. To entry point aplikacji Windows.

somekind na zdrowy rozum masz racje, gdzies musialby byc tworzony obiekt zeby klasa wejsciowa nie musiala byc statyczna ale W ACTIONSCRIPT 3.0 wlasnie tak to dziala. Jest Main ktory nie jest statyczny i wywoluje sie od razu po rozpoczeciu dzialania programu. Moze flashplayer inicializuje obiekt takiej klasy ktory jednoczesnie jest singletonem, tego nie wiem.

Być może. Twórcy AS zapewne mogli sobie pozwolić na większą wolność w tym zakresie niż twórcy .NET frameworka.

Jak dla mnie to Ty mieszasz dwa pojęcia: zobaczyłeś ten jeden specyficzny przypadek statycznej metody Program.Main, która jest wymagana przez framework/system i próbujesz z tego wysnuć jakąś ogólną zasadę dotyczącą klas, klas bazowych i konstruktorów, czyli rzeczy, które z Program.Main nie mają nic wspólnego.

Mam natomiast pewnosc ze klasa wejsciowa w as 3 NIE JEST statyczna.

W C# też nie. class Program - tu nie ma żadnego static.


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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