eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingc++ -> c#Re: c++ -> c#
  • Data: 2011-10-24 13:59:21
    Temat: Re: c++ -> c#
    Od: "Wojciech \"Spook\" Sura" <spook"mad@hatter"op.pl> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    Dnia 24-10-2011 o 10:16:42 Sarr. <s...@g...pl> napisał(a):

    > witam,
    >
    > mam luzne pytanie do tych, ktorzy doswiadczyli przejscia jak w temacie,
    > czyli z c++ na c#. nie zrozumcie mnie zle, chodzi mi o to, zeby rzucac
    > c++ na rzecz c#.
    >
    > chodzi mi o opinie o tym co w c# jest 'lepsze' a co 'gorsze', przy czym
    > podkreslam, chodzi mi o subiektywne opinie i konkretne przyklady a nie
    > generalizacje. co sie bardziej podoba, a co mniej. w czym c# ulatwia
    > zycie a z czym w c# trzeba sie meczyc. co moze sprawic, ze dostajac nowe
    > zadanie do rozwiazania wybierzecie wlasnie c#, i druga strona medalu, do
    > jakich zastosowan c# nie wybralibyscie nigdy w zyciu.

    Nigdy nie przechodziłem z C++ na C# w ścisłym sensie. IMO oba języki
    dobrze się uzupełniają.

    No to ciekawszych rzeczy:

    * Automatyczne zarządzanie pamięcią. Nie ma czegoś takiego jak delete,
    manager pamięci sam decyduje o tym, kiedy zwalniać pamięć (i zdarza się
    czasami, że wychodzi mu to lepiej niż w programie napisanym w C++). Trzeba
    natomiast pamiętać o zwalnianiu zasobów natywnych.

    * Własności w klasach. Szkoda tylko, że wzorowali się na C++, a nie na
    Delphi i nie można tworzyć indeksowanych własności. Analogiczny kod:

    <C++>
    class MyClass
    {
    public:
    int GetValue(int index);
    void SetValue(int index, const int value);

    int GetValue2(int index);
    void SetValue2(int index, const int value);
    };

    // Implementacje

    // Użycie:

    myClass.SetValue(5, 5);

    </C++>

    <C#>
    public class ValueClass
    {
    public int this[int index]
    {
    get
    {
    // Implementacja
    }
    set
    {
    // Implementacja
    }
    }
    }

    public class Value2Class
    {
    public int this[int index]
    {
    get
    {
    // Implementacja
    }
    set
    {
    // Implementacja
    }
    }
    }

    public class MyClass
    {
    private ValueClass _valueClass;
    private Value2Class _valueClass;

    public ValueClass Value
    {
    get
    {
    return _valueClass;
    }
    }

    public Value2Class Value2
    {
    get
    {
    return _value2Class;
    }
    }
    }

    // Użycie:

    myClass.Value[5] = 5;

    </C#>

    <Delphi>
    type TMyClass = class(TObject)
    protected
    function GetValue(index : integer) : integer;
    procedure SetValue(index : integer; const newValue : integer);
    function GetValue2(index : integer) : integer;
    procedure SetValue2(index : integer; const newValue : integer);
    public
    property Value[index : integer] : integer read GetValue write SetValue;
    property Value2[index : integer] : integer read GetValue2 write
    SetValue2;
    end;

    // Implementacje

    // Użycie:

    myClass.Value[5] := 5;

    </Delphi>

    * Zdarzenia wbudowane w język. Nareszcie.

    * Gotowce, gotowce, gotowce. W bibliotekach standardowych jest opakowane
    prawie wszystko, co można chcieć zrobić z Windowsem. Sieć, rejestr,
    rysowanie, wyrażenia regularne, dostęp do systemu plików, przetwarzanie
    tekstu, XML. Tona gotowych generycznych struktur danych.

    * Kolejność kompilacji plików nie gra roli, liczą się tylko namespace'y.

    <Plik1.cs>

    namespace MyNamespace
    {
    public class A
    {
    private B _b;
    }
    }

    </Plik1.cs>

    <Plik2.cs>

    namespace MyNamespace
    {
    public class B
    {
    private A _a;
    }
    }

    </Plik2.cs>

    * Refleksje, czyli bardzo mocno rozbudowane RTTI. Nic się nie schowa,
    jeśli ktoś się uprze, to może swobodnie rzeźbić po prywatnych polach klas.
    Enumerować członków klas, łącznie z metodami i własnościami.

    * Atrybuty (które można przypiąć do czegokolwiek). Przydają się w
    niektórych sytuacjach, na przykład:

    <C#>
    public enum Colors
    {
    [MyAttribute(R=255, G=0, B=0)]
    Red,
    [MyAttribute(R=0, G=255, B=0)]
    Green,
    [MyAttribute(R=0, G=0, B=255)]
    Blue
    }
    </C#>

    Ciekawostka - Delphi w najnowszej wersji obsługuje również atrybuty (i
    kompiluje do kodu natywnego); C++ niestety nie :)

    * Typy generyczne bez refleksji nadają się tylko do konstruowania
    kontenerów danych (na przykład nie można - jak w C++ - "na wiarę" zawołać
    metody obiektu, którego typ jest określany podczas instancjonowania typu
    generycznego)

    Tyle z pamięci. Zachęcam do zapoznania się z językiem, jest bardzo ciekawy.

    > pozdrawiam,
    > Marcin.

    Pozdrawiam -- Spook.

    --
    ! ._______. Warning: Lucida Console sig! //) !
    ! || spk || www.spook.freshsite.pl / _ """*!
    ! ||_____|| spook at op.pl / ' | ""!
    ! | ___ | tlen: spoko_ws gg:1290136 /. __/"\ '!
    ! |_|[]_|_| May the SOURCE be with you! \/) \ !

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: