2013-07-10 6 views
11

W Scali można zdefiniować klasę podstawową lub cechę (interfejs), tak aby jedyne klasy, które mogą rozszerzać tę klasę, muszą być umieszczone w tej samej klasie .Uszczelnianie klasy abstrakcyjnej lub interfejsu w klasie .NET

Jest to przydatny wzór przy kodowaniu bibliotek, czy istnieje odpowiednik w .NET?

+0

nie widzę tę zaletę, można zadowolić ELI5? (Wiem, czego chcesz, ale nie wiem dlaczego) – jnovacho

+0

Dobrze z tym wzorem możesz faktycznie zaimplementować "wyrafinowane" wyliczenia i jest to naprawdę przydatne. Możesz zagwarantować, że istnieje tylko pewna liczba implementacji dla twojej abstrakcyjnej klasy – Edmondo1984

+0

Och, widzę! Dzięki. – jnovacho

Odpowiedz

21

Jedynym sposobem symulacji jest posiadanie prywatnego konstruktora w klasie abstrakcyjnej i zapewnienie implementacji w postaci klas zagnieżdżonych.

Przykład

public abstract class Foo 
{ 
    private Foo(int k) {} 

    public class Bar : Foo 
    { 
    public Bar() : base(10) {} 
    } 
} 
+5

+1. Lub oznaczenie konstruktora klasy abstrakcyjnej "internal" to kolejna podobna opcja, którą możesz uzyskać na zajęciach. –

Powiązane problemy