2010-10-19 14 views
7

Fondamentalmente quello che vorrei sapere è se c'è un modo per aggiungere nuove 'istruzioni' ai linguaggi basati su .net? Un esempio di ciò che sto cercando sarebbe qualcosa di simile all'introduzione di uno public class MyClass decoratorOf ClassWithLotsOfMethods e in fase di pre-compilazione che cambia quella per essere una classe normale che sovrascrive tutto per impostazione predefinita, ma i metodi che definisco.Estensione del linguaggio C#?

Un altro esempio potrebbe essere le proprietà auto .NET 3.5, o metodi di estensione, ecc

Questo è solo per divertimento, non è che voglio veramente fare questo, solo curioso di sapere se è possibile

Grazie! Seba

+0

Suona come si sta pensando al modo in cui mi piacerebbe come i metodi di estensione per funzionare - se Foo è dichiarato come ExtensionClass di Bar, quindi un oggetto dichiarato come Foo sarebbe considerato come una Barra, eccetto per l'elaborazione in fase di compilazione dei metodi auto-statici e delle proprietà di Foo che sarebbe incondizionatamente ombreggia quelli di Bar (anche quando esistono metodi corrispondenti in Bar). Un tale disegno permetterebbe ai membri di essere aggiunti a Bar senza rompere il codice che usa Foo, anche se tali membri corrispondono ai nomi delle estensioni di Foo. Peccato che io non conosca alcun modo per far sì che il linguaggio lo supporti. – supercat

+0

@supercat: dovresti dare un'occhiata a [Scala implicits] (http://www.artima.com/weblogs/viewpost.jsp?thread=179766) –

risposta

8

C# non consente questo. Ovviamente è possibile modificare l'IL generato con un post-compilatore (come CciSharp).

Alcuni linguaggi .NET alternativi che consentono le estensioni sono Nemerle e Boo.

5

Non c'è niente di integrato.

Potresti ovviamente utilizzare un PreProcessor ma questo non ti renderà popolare.

+1

Sì, guarda Simula - tutto quello che hanno fatto è stato inventare oggetti- programmazione orientata. O C++ - non è molto popolare, vero? :-) – Ken

+0

@ Ken: come aggiungere un pre-processore lo rende popolare? E cosa ha a che fare con Simula (che in realtà non era un'estensione di ALGOL)? –

+0

Non vedo alcun motivo per credere che l'uso di un preprocessore avrebbe un effetto particolare sulla propria popolarità, in quanto ci sono buoni esempi di estrema popolarità e impopolarità sia con che senza uno. E (se una dozzina di storie separate che ho trovato su internet devono essere credute) Simula ha iniziato la vita come un preprocessore per Algol (come C++ ha iniziato la vita come un preprocessore per C), anche se (come C++) ha presto preso vita proprio. – Ken

3

Non che mi conoscono, ma un'occhiata a PostSharp e T4 Templates e vedere se questo può risolvere il tuo problema :)

+0

Ho costruito decoratori con T4 prima. Ha funzionato bene e non ha richiesto nulla in più da installare –

+0

T4 sarebbe la mia prima opzione. –

Problemi correlati