2012-01-25 11 views
10

Dlaczego umieszczamy main() metodę zawsze wewnątrz class w C#, podczas gdy w C++ zawsze znajduje się poza class.dlaczego główna metoda w języku C# jest zawsze umieszczana wewnątrz klasy, ale nie w C++

+20

Absurd, jak może się wydawać, ponieważ są to różne języki. –

+0

Żadna z odpowiedzi nie dodała żadnego historycznego kontekstu ... Tak wiele języków programowania ma większość punktów wejścia o nazwie "main", dlaczego 'main', a nie" start "? –

+0

@parapurarajkumar 'start' też by działało. Ale musiał być dokonany wybór. Kiedy wybór został dokonany, ten wybór utknął. –

Odpowiedz

8

Ze względów historycznych. C++ ewoluował z C, który miał globalną funkcję main(). C# jest znacznie młodszy i został zaprojektowany od zera. Jedną z cech konstrukcyjnych C# jest brak funkcji globalnych, więc funkcja main musi należeć do klasy.

+4

Nie sądzę, że to jest historyczne. Jeżeli decyzja miałaby zostać podjęta dzisiaj, myślę, że nadal byłaby to funkcja wolnostojąca. W przeciwieństwie do niektórych języków C++ w pełni obejmuje funkcje globalne. –

+0

@ edA-qamort-ora-y: To jest historyczne, ale niehistoryczne rozumowanie rzeczywiście ma odpowiednią wagę :) –

4

Ponieważ w .NET można umieszczać metody tylko wewnątrz typów. Nie możesz ich unieść w pustej przestrzeni. C++ ma swoje dziedzictwo z C, które nie jest językiem OOP, więc możesz definiować funkcje w dowolnym miejscu.

+4

To nie tylko dziedzictwo; funkcje wolnostojące są bardzo użyteczne, a standard C++ wprowadza wiele z nich poza te odziedziczone po C. –

+0

ok, rozumiem. dziękuję –

3

Nie można umieścić metody poza klasą/strukturą w języku C#. Każda metoda musi być w klasie/strukturze.

11

Projektanci języka C++ podążali za przewodnikiem C, więc główna funkcja jest prostą funkcją.

Projektanci języków C# dokonali wyboru podczas projektowania języka, że ​​wszystkie metody muszą należeć do klas.

0

Jest to konwencja. Co jest zgodne z Javą (również wynika z semantycznego posiadania metody w klasie).

+0

wiem, ale czy jest jakiś inny konkretny powód lub zwykła konwencja? –

+0

@r_ohit - To tylko konwencja. Projektanci Javy uważali, że dobrym pomysłem jest mieć wszystko więcej OO. Potem wymyślili funkcje statyczne, aby pokonać ograniczenie ... –

+1

To nie jest konwencja - to wymóg języka. Konwencja oznacza, że ​​istnieją inne możliwości. – adelphus

0

C# to kompletny język zorientowany obiektowo, w którym wszystko jest traktowane jako obiekty. Dlatego Main() jest trzymany w klasie.

Powiązane problemy