C# - co oznaczają te deklaracje ?

2

na chwilę rzuciłem się na C# (znam C++) ale jak patrzę na C# to się zastanawiam, że tam jest pomieszanie z poplątaniem. Czy ktoś by wyjaśnił jak rozumieć poszczególne linie kodu ?

namespace PrzestrzenNazw
{
   class Klasa
   {
        static void Main(string args[])
        {
        }
   }
}

Jako, że znam C++, wiem co one robią w C++ ale w C# wydaje mi się to takie z D#$%PY i kompletnie nie rozumiem tej idei takiego zapisu. Czy ktoś by wyjaśnił jak rozumieć takiego twora ?

i sory, ale przez przypadek mi się kliknęło i wątek poszedł bez kodu...

0

@zkubinski: a czego konkretnie nie rozumiesz z tego szkieletu kodu?

0

dobra w C++ najprostszy kod jest taki i rozumiem go tak

class Obiekt //stworzyłem sobie klasę o nazwie obiekt
{
public:
   int zmienna=0;
};

int main(void) //w funkcji głównej wykonuję cały program
{
 Obiekt obj;
 obj.zmienna=2; //tutaj tworzę obiekt i coś na nim robię
}

jeżeli chodzi o C# nie wiem jaka jest logika myślenia w takim zapisie jak przedstawiłem w pierwszym poście. Wyjaśnisz jak to rozumieć ?

3
zkubinski napisał(a):

dobra w C++ najprostszy kod jest taki i rozumiem go tak

najprostszy kod to będzie


int main(void) //w funkcji głównej wykonuję cały program
{
 int zmienna=2; //tutaj tworzę obiekt i coś na nim robię
}

jeżeli chodzi o C# nie wiem jaka jest logika myślenia w takim zapisie jak przedstawiłem w pierwszym poście. Wyjaśnisz jak to rozumieć ?

a w c# o ile pamiętam wszystko musi być w jakiejś klasie no wiec main też, tak dla porządku ;)

0

Napisałeś ten post w taki sposób że ciężko powiedzieć czy to trolling czy jednak nie. Nie zadałeś także pytania na które moglibyśmy ci odpowiedzieć. Czego dokładnie nie rozumiesz? Jeżeli chcesz wiedzieć dlaczego funkcja main jest w klasie to może zainteresuje cię ten wątek: https://stackoverflow.com/questions/9002790/why-main-method-in-c-sharp-is-always-placed-inside-the-class-but-not-in-c

10

W C i C++ jest jeden punkt wejścia - globalna funkcja main.

W Javie i C# punktem wejścia jest statyczna metoda main w dowolnej klasie, a więc możesz mieć dowolną liczbę punktów wejścia do programu. Musisz jednak podać nazwę tej klasy podczas uruchamiania programu (albo sobie kliknąć w odpowiednim miejscu w IDE, które to samo wstawi nazwę klasy tam gdzie trzeba).

0

@Miang:
dobra, już mi się wyjaśniło. Trochę odjazd miałem z pierwszym zetknięciem się, bo w C++ jest to jakoś intuicyjnie logiczne, a w C# wywrócone do góry nogami. A więc czego się dowiedziałem biorąc pod uwagę kod z pierwszego posta

namespace PrzestrzenNazw
{
   class Klasa
   {
        static void Main(string args[])
        {
        }
   }
}

przestrzeń nazw nam mówi, że gdy będziemy pisać inny program i będziemy chcieli skorzystać z klasy zawartych w tej przestrzeni, to będziemy musieli użyć go w ten sposób

using PrzestrzenNazw

idąc dalej, skoro już wiemy z jakiej przestrzeni nazw będziemy korzystać, to trzeba też wiedzieć, z jakich klas będziemy korzystać i np

using PrzestrzenNazw;

namespace NowaPrzestrzenNazw
{
   PrzestrzenNazw.Test();
}

tylko jeszcze nie wiem jak tworzyć wiele innych funkcji w tej przestrzeni nazw... bardzo pokręcone ale chyba da się z tym żyć...

PS. Naprawdę długo zwlekałem z nauką C# bo bałem się go ugryźć

4

tylko jeszcze nie wiem jak tworzyć wiele innych funkcji w tej przestrzeni nazw
Nie myśl o funkcji --> metodzie jako czymś oddzielnym ale bardziej o czymś co operuje na jakimś bycie.

W C#/Java tworzysz sobie klasy które są "zbiornikami" na zmienne i metody które operują na nich. Tutaj się nie tworzy metod oddzielnie (no dobra są klasy Utilsowe :P)

0

@zkubinski:
a już doszedłeś do tego że dziedziczy się tylko z jednej klasy (i najwyżej z kilku interfejsów)? Mnie to właśnie rozwala

1

@Miang: a dlaczego Cię to rozwala? Możliwość dziedziczenia po wielu klasach rodzi więcej problemów...

0

dobra, wątek do zamknięcia, bo już złapałem ruch lewostronny xD (przyzwyczajony do C++)

2

w C# 10 poszli w kierunku pythona i nie musisz pisać w taki sposób kodu, możesz ten boilerplate pominąć

Tutorial: Explore ideas using top-level statements to build code as you learn

Top-level statements enable you to avoid the extra ceremony required by placing your program's entry point in a static method in a class. The typical starting point for a new console application looks like the following code:

using System;

namespace Application
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
        }
    }
}

The preceding code is the result of running the dotnet new console command and creating a new console application. Those 11 lines contain only one line of executable code. You can simplify that program with the new top-level statements feature. That enables you to remove all but two of the lines in this program:

Console.WriteLine("Hello, World!");

w csproju warto mieć ustawione ImplicitUsings

<PropertyGroup>
	<OutputType>Exe</OutputType>
	<TargetFramework>net6.0</TargetFramework>
	<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup> 

A dodatkowo, przy normalnych projektach:

wcięcie na namespace też można wyrzucić i pisać

namespace PrzestrzenNazw

class Klasa
{
	static void Main(string args[])
	{
	}
}
0

to może jeszcze w ramach wątku podpowiecie jakie biblioteki w C# używane są do tworzenia GUI ?

0

Spróbuj na początek WinFormsy

1

Dodam (raczej jako ciekawostkę), że tworzenie namespace'a jest opcjonalne.

class Blah
{
    static void Main()
    {
        System.Console.WriteLine("Hello World!");
    }
}
0

@WeiXiao:
Mam do ciebie pytanie

czy asp net core jest do sieci, a net framework do GUI ? Bo tak rozumiem ten artykuł

więc, żeby mieć oba, to trzeba pobrać net standard ?

0

Pobierasz to:

https://dotnet.microsoft.com/download

I teraz tak, problem był taki że w .NET Corze na początku nie było GUI, ale teraz jest.

Nie wiem jak to w praktyce wygląda, ale raczej już nie powinieneś się przejmować .NET Frameworkiem i robić wszystko w Core.

1

Zapomnij o Standard, Framework, Core.

Teraz jest po prostu .NET

8
zkubinski napisał(a):

dobra, już mi się wyjaśniło. Trochę odjazd miałem z pierwszym zetknięciem się, bo w C++ jest to jakoś intuicyjnie logiczne

Nie, nie jest. Ani w C++, ani w C#, ani w Javie, ani w żadnym innym języku. To jest coś, co wymaga nauczenia się, a nie intuicji.

namespace PrzestrzenNazw
{
   class Klasa
   {
        static void Main(string args[])
        {
        }
   }
}

przestrzeń nazw nam mówi, że gdy będziemy pisać inny program i będziemy chcieli skorzystać z klasy zawartych w tej przestrzeni, to będziemy musieli użyć go w ten sposób

using PrzestrzenNazw

Nie, nie będziemy musieli w ten sposób. Można się odwoływać po pełnych nazwach.

idąc dalej, skoro już wiemy z jakiej przestrzeni nazw będziemy korzystać, to trzeba też wiedzieć, z jakich klas będziemy korzystać i np

Doprawdy straszne, że trzeba wiedzieć, co się robi. :P

tylko jeszcze nie wiem jak tworzyć wiele innych funkcji w tej przestrzeni nazw... bardzo pokręcone ale chyba da się z tym żyć...

Nie da się, bo C# w przeciwieństwie do C++ to język obiektowy.

Co do reszty dziwacznych wypowiedzi z tego wątku:

  • Przestrzenie nazw istnieją też w C++ i jest to dokładnie ta sama koncepcja, tylko w C# do nawigacji używa się kropki, a nie ::.
  • Autorem C#, dokładnie tak jak i C++ jest Duńczyk, na dodatek ten sam, który tworzył Turbo Pascala i Delphi.
  • Jeśli kogoś przeraża to, że inny język imperatywny stosuje inne znaczki, albo nieco inną składnię, to chyba znak, że powinien poznać adresy okolicznych piekarni. Mogą się przydać do szukania pracy.
1

@somekind:

Przestrzenie nazw istnieją też w C++ i jest to dokładnie ta sama koncepcja, tylko w C# do nawigacji używa się kropki, a nie ::

to wiem, ale w C# jest to naprawdę z D%PY rozwiązane...

Autorem C#, dokładnie tak jak i C++ jest Duńczyk, na dodatek ten sam, który tworzył Turbo Pascala i Delphi.

no i ? Facet swoją "twórczością" narobił pasztetu

Jeśli kogoś przeraża to, że inny język imperatywny stosuje inne znaczki, albo nieco inną składnię, to chyba znak, że powinien poznać adresy okolicznych piekarni. Mogą się przydać do szukania pracy.

mnie nie przeraża, raczej mnie przeraża takie LEWE myślenie, bo powiedz mi, jaki jest sens w przestrzeni nazw, zamykać klasę, a w klasie zamykać funkcję główną ? Czy to nie jest poyebane ? Moim zdaniem to taka naciągana obiektowość, bo ma słowo kluczowe class a w środku funkcję główną main xD - to tak jakby cały program wykonać w klasie

9

Fajne podejście, takie nie za profesjonalne. Widać co z człowiekiem robi tkwienie tylko w jednym języku przy jednoczesnym całkowitym braku otwartości na inne. Na wszystkie pytania znalazłbyś odpowiedź w kilka minut robiąc podstawowy tutorial wprowadzający do języka. Ale po co, lepiej założyć że wszędzie powinno być tak jak w C++, a jak jest inaczej to aberracja.

Tylko nie daj Boże żebyś kiedyś postanowił spróbować coś zrobić funkcyjnie, bo Ci się cały system wartości zawali :D

2

Troll z 15-letnim stażem na forum ? Jeśli nie troll, to gratuluę otwartości na cokolwiek nie ze swojego podwórka... Czekamy na pytania o wskaźniki i różnice między typami wartościwymi i referencyjnymi i ból d... o Garbage Collector

1
zkubinski napisał(a):

to wiem, ale w C# jest to naprawdę z D%PY rozwiązane...

Jest dokładnie tak samo jak w C++. Przestrzeń -> klasa -> metoda.

mnie nie przeraża, raczej mnie przeraża takie LEWE myślenie, bo powiedz mi, jaki jest sens w przestrzeni nazw, zamykać klasę, a w klasie zamykać funkcję główną ? Czy to nie jest poyebane ? Moim zdaniem to taka naciągana obiektowość, bo ma słowo kluczowe class a w środku funkcję główną main xD - to tak jakby cały program wykonać w klasie

Zgodzę się, że w tym przypadku to "udawana obiektowość". Niemniej jednak, jest to tak nieistotny detal, i żadna trudność, że jeszcze nie spotkałem się, aby ktoś miał aż takie problemy i taki ból tyła z tego powodu. To przecież nie wymaga w ogóle żadnego zaangażowania mózgu - po prostu, tak organizujemy kod w tym języku i tyle, deklaracja zmiennej jest znacznie trudniejsza.

1
somekind napisał(a):
  • Autorem C#, dokładnie tak jak i C++ jest Duńczyk, na dodatek ten sam, który tworzył Turbo Pascala i Delphi.

Uściślę: to jest dwóch Duńczyków.

Bjarne Stroustrup (C++) ~ Anders Hejlsberg (Delphi, C#)

0

Czy może ktoś z was polecić jakieś dobre PEŁNE kursy z C# i NET aby nauczyć się pisać aplikacje GUI ?

0

Aventus: Jeśli nie możesz przyzwyczaić się, że w C# wszystko musi znajdować się w jakimś typie (klasa, struktura, interfejs, wyliczenie, krotka, rekord, delegat )
to w C# 9/10 jest coś takiego jak instrukcja/ instrukcje najwyższego poziomu . Mianowicie znikają dyrektywy using do najbardziej popularnych przestrzeni nazw :
using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
Klasa Program niejawnie znajduje się w globalnej przestrzeni nazw,
znika klasa Program
znika funkcja Main .
To , że to wszystko znika nie znaczy, że nie istnieje w programie, po prostu jest automatycznie generowane przez kompilator C# w kodzie IL tak jak wiele innych rzeczy w C#
Jeśli chcesz po staremu pisać to zawsze możesz ręcznie zmodyfikować program.

0
somekind napisał(a):

Autorem C#, dokładnie tak jak i C++ jest Duńczyk, na dodatek ten sam, który tworzył Turbo Pascala i Delphi.

Autorem PHP, dokładnie tak jak i C# jest Duńczyk. Stworzył swój pseudo-język, bo nie rozumiał Perla.

5
zkubinski napisał(a):

Jako, że znam C++,

odważne stwierdzenie

6

poinformowano mnie że nasza maskotka z działu C++ przeszła do C#. Chociaż już się widzę trochę nie odzywał to uprzedzę was zanim wdacie się w dyskusję.
Nie, autor nie zna C++ nie rozumie jego podstaw nawet. Qt próbował ale jak to stwierdził dokumentacja kiepska i nie rozumie(dodam qt ma dobrą dokumentację). Przez 1,5 roku w c++ nie zrobił parsera json przy użyciu qt.

Moja rada. Nie wdawajcie się w dyskusję bo gość nie ma wiedzy o czym kol wiek. A jak czegoś nie rozumie czyli wszystkiego to wina twórców, dokumentacji albo ludzi z 4p.

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