2009-04-27 13 views
42

Wszyscy wiemy, że gdy tworzymy anonimową klasę tak:Czy mogę podać sensowną nazwę klasy anonimowej w języku C#?

var Employee = new { ID = 5, Name= "Prashant" }; 

... w czasie wykonywania będzie typu:

<>f__AnonymousType0<int,string> 

Czy istnieje jakiś sposób, aby podać nazwę opisową do takich klas?

+17

http://dictionary.reference.com/browse/anonymous – Cerebrus

+5

To naprawdę nie jest głupie pytanie, jestem z Jonem Skeet na ten temat, potrzebujemy nazwanych typów anonimowych.zaczerpnięte z http://stackoverflow.com/questions/534690/linq-to-sql-return-anonymous-type – Maslow

+1

Nie jestem pewien, ale nie ma anonimowych klas w języku C#. Istnieją anonimowe typy, co czyni wielką różnicę. – Damian

Odpowiedz

24

Czy to zwykła klasa z imieniem?

public class Employee 
{ 
    public int ID; 
    public string Name; 
} 


var Employee = new Employee { ID = 5, Name= "Prashant" }; 
122
public class Employee {} 

38

Jest to typ anonimowy, że celowość. Obiekty te mają być tymczasowe. Hell, właściwości są nawet tylko do odczytu.

Przepraszam, jestem mądralą. Odpowiedź brzmi: nie, nie ma sposobu, aby powiedzieć kompilatorowi, jakiego nazwiska użyć do anonimowego typu.

W rzeczywistości nazwy typów generowanych przez kompilator używają niedozwolonych znaków w swoich nazwach, dzięki czemu nie można zderzać się z nazwą w aplikacji.

36
public class Employee { 
    public int ID { get; set; } 
    public string Name { get; set; } 
} 

Następnie użyj następującej składni

var employee = new Employee { ID = 5, Name = "Prashant" }; 
2

myślę, że z definicji typów anonimowych nie może mieć nazwę, po prostu to, co kompilator daje go. Jeśli szukasz bardziej znaczących informacji o czasie projektowania w przypadku typów anonimowych, to oczekujesz zbyt wiele od kompilatora.

4

Tak, tworzysz anonimową klasę, jeśli chcesz, aby klasa mieć nazwę, tj Nie Anonymous, następnie zadeklarować regularne klasy lub struct.

4

Ponieważ jest anonimowy, nie można go nazwać. Jeśli potrzebujesz znać nazwę typu, musisz naprawdę stworzyć klasę.

4

Nie, nie ma sposobu, aby nadać tym klasom wymowną nazwę, tak jak je zadeklarowałeś. Anonimowe typy są po prostu anonimowe. Nie ma sposobu, aby jawnie "nazwać" typ w kodzie bez uciekania się do bardzo brzydkich hacków.

Jeśli naprawdę potrzebujesz podać nazwę, musisz wyraźnie zadeklarować i użyć nowego typu o właściwościach, których potrzebujesz.

23

Właściwie, jeśli nie obawiasz się bardzo grubych brył, możesz użyć TypeBuilder do zbudowania własnego typu środowiska wykonawczego w oparciu o twój anonimowy typ, który pozwoli ci określić nazwę dla tego typu. Oczywiście o wiele łatwiej jest zadeklarować klasę, jak to sugerują wszyscy inni w tym wątku, ale sposób TypeBuilder jest o wiele bardziej ekscytujący. ;)

TypeBuilder

8

Odpowiedź Java świat byłby local class (zdefiniowane w metodzie), które są nieobecne w języku C#.

+1

Właściwie szukałem tej dokładnej funkcjonalności, gdy znalazłem ten wątek. Pracowałem tylko kilka lat w Javie, w przeciwieństwie do ~ 10 lat w .NET. Możliwość tworzenia lokalnej klasy (z poziomu interfejsu lub klasy bazowej) jest zdecydowanie bardzo przydatną funkcją w Javie, której brakuje w .NET. – MikeJansen

Powiązane problemy