2011-01-18 8 views
5

Do czego służy ten wzór? zauważ, że różni się od "ciekawie powtarzającego się wzorca szablonu".klasa X: X <T> {} wzór w języku C# --- do czego służy?

+3

Czy masz na myśli "klasę X: T "? Jeśli tak, to * jest * ciekawie powtarzającym się szablonem. Zauważ, że jeśli twój tytuł jest poprawny, "X" i "X " są w rzeczywistości dwoma różnymi typami; musielibyśmy zobaczyć przykład takiego użycia. – cdhowie

+0

Tak, jest to X: X , a nie wzór CRTP. – user580650

Odpowiedz

4

Posiadanie ogólnej klasy przodków, która zna rzeczywistego potomka, który dziedziczy po niej, pomaga w scenariuszach, w których ogólny przodek musi ujawnić określoną nietypową klasę potomków jako część nie generycznego wyniku potomka.

Jednym z typowych przykładów jest metoda fabryki oświadczył w ogólnym przodka:

public class Parent<T> 
    where T : Parent<T>, new 
{ 
    public static T Create() 
    { 
     return new T(); // would be typically something more sophisticated 
    } 
} 

public class Child : Parent<Child> 
{ 
} 

Podstawową zaletą tej koncepcji jest code-deduplikacji.

+0

Czy to nie jest po prostu wzorzec Ciekawie powtarzającego się szablonu? Post pyta o klasę X: X , a nie klasę X: Y .... – womp