2010-10-19 13 views
7

Zasadniczo chciałbym wiedzieć, czy istnieje jakiś sposób dodania nowych "instrukcji" do języków opartych na .net? Przykładem tego, czego szukam, będzie coś w rodzaju wprowadzenia public class MyClass decoratorOf ClassWithLotsOfMethods oraz w czasie przed kompilacją, który zmienia klasę na normalną, która domyślnie przesłania wszystko, ale definiowane przeze mnie metody.Rozszerzanie języka C#?

Innym przykładem może być właściwości auto .NET 3.5 lub rozszerzenie metod itp

To jest po prostu dla zabawy, a nie, że naprawdę chcę to zrobić, po prostu ciekawy, czy jest możliwe

Dzięki! Seba

+0

Brzmi jak myślisz drogi ja jak metody rozszerzeń do pracy - jeśli Foo zostanie zadeklarowany jako ExtensionClass of Bar, to obiekt zadeklarowany jako Foo zostanie uznany za pasek, z wyjątkiem przetwarzania w czasie kompilacji samostatecznych metod i właściwości Foo, które bezwarunkowo cień tych z Bar (nawet gdy odpowiednie metody istnieją w Bar). Taki projekt pozwoliłby na dodanie członków do Baru bez łamania kodu używającego Foo, nawet jeśli członkowie ci pasują do nazw rozszerzeń Foo. Szkoda, że ​​nie znam żadnego sposobu na wsparcie językowe. – supercat

+0

@supercat: powinieneś rzucić okiem na [Scala implicits] (http://www.artima.com/weblogs/viewpost.jsp?thread=179766) –

Odpowiedz

8

C# nie pozwala na to. Możesz oczywiście poprawić wygenerowaną IL za pomocą post-kompilatora (np. CciSharp).

Niektóre alternatywne języki .NET, które dopuszczają rozszerzenia, to: Nemerle i Boo.

5

Nie ma nic wbudowanego.

Można oczywiście użyć preprocesora, ale to nie sprawi, że będziesz popularny.

+1

Tak, spójrz na Simulę - wszystko, co zrobili, to wymyślić obiekt zorientowane programowanie. Lub C++ - to niezbyt popularne, prawda? :-) – Ken

+0

@Ken: jak dodanie preprocesora sprawi, że będzie popularny? I co to ma wspólnego z Simulą (która w rzeczywistości nie była przedłużeniem ALGOL)? –

+0

Nie widzę powodu, aby sądzić, że użycie preprocesora miałoby jakiś szczególny wpływ na popularność, ponieważ istnieją dobre przykłady ekstremalnej popularności i niepopularności zarówno z jednym, jak i bez niego. I (jeśli wierzyć tuzin oddzielnych historii znalezionych w Internecie) Simula zaczęła życie jako preprocesor dla Algola (ponieważ C++ zaczęło życie jako preprocesor dla C), chociaż (podobnie jak C++) wkrótce nabrało ono życia posiadać. – Ken

3

że nie wiem o, ale spojrzeć na PostSharp i T4 Templates i sprawdzić, czy to rozwiąże problem :)

+0

Zbudowałem już dekoratory z T4. To działało dobrze i nie wymagało niczego dodatkowego do zainstalowania. –

+0

T4 byłaby moją pierwszą opcją. –