• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Klasy anonimowe

Cloud VPS
+1 głos
507 wizyt
pytanie zadane 5 maja 2021 w C# przez tomasz12345 Użytkownik (750 p.)
Witam, mógłby mi ktoś wytłumaczyć na czym polega roznica miedzy klasą anonimową w Javie oraz w c#? z tego co rozumiem to dwie inne rzeczy w obu językach... w javie nie ma delegatów, natomiast w kazdej deifnicji klasy anonimowej tyczącej się c# są one wspomniane... bede wdzięczny za każde wyjaśnienie

1 odpowiedź

+2 głosów
odpowiedź 5 maja 2021 przez Velta Maniak (52,830 p.)
edycja 5 maja 2021 przez Velta

W C# typ anonimowy pozwala na utworzenie obiektu bez uprzedniego określenia jej struktury (klasy). Zamiast najpierw definiować klasę, na przykład:

public class Point2D
{
    public double X { get; set; } = 0.0;
    public double Y { get; set; } = 0.0;

    public Point2D() { }

    public Point2D(double x, double y)
    {
        X = x;
        Y = y;
    }

    public override string ToString() => $"({X}, {Y})";
}

[...]

Point2D p = new Point2D
{
    X = 4.0,
    Y = 6.5
};
Console.WriteLine($"P = {p.ToString()}");

Możesz utworzyć od razu obiekt z takimi właściwościami, jeżeli potrzebujesz na przykład tylko jednego obiektu:

var point2d = new
{
    X = 4.0,
    Y = 6.5
};

W Javie – jeżeli dobrze mówię – polega to na definiowaniu tego i tylko tego, co w interfejsie podczas tworzenia obiektu, by można było tego używać spoza definicji obiektu.

interface SomeInteface {
    void doTheMagic();
}

[...]

SomeInterface obj = new SomeInterface() {
    @Override
    public void doTheMagic() {
        System.out.println("Hello, World!");
    }
}

EDIT: Drobne poprawki redakcyjne dla akapitu związanego z Javą oraz poprawa konstruktora i uproszczenie przeciążenia dla kodu w C#.

komentarz 5 maja 2021 przez tomasz12345 Użytkownik (750 p.)
ale typ anonimowy a klasa to nie są dwie rozne rzeczy?
1
komentarz 5 maja 2021 przez DarthMazut Bywalec (2,990 p.)
Wpisz w googlu "C# anonymous class" to wyskoczy Ci "anonymous type", nie ma w C# anonimowych klas per se.

Może chodzi Ci o to, że jeżeli używasz wyrażeń lambda to pod spodem kompilator buduje klasę? Ale ta klasa nie jest do końca anonimowa, ma swój identyfikator, chociaż jest niewidoczna z poziomu użytkownika.

Podobne pytania

0 głosów
1 odpowiedź 564 wizyt
pytanie zadane 14 września 2018 w Bezpieczeństwo, hacking przez Karzolina Nowicjusz (120 p.)
+1 głos
1 odpowiedź 527 wizyt
0 głosów
0 odpowiedzi 157 wizyt

93,460 zapytań

142,454 odpowiedzi

322,724 komentarzy

62,838 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...