2013-07-10 18 views
11

Scalaでは、基底クラスまたは特性(インターフェイス)を定義してそのクラスを拡張できるクラスのみを同じクラスに配置する必要があります。.NETクラスの抽象クラスまたはインターフェイスのシール

これはライブラリをコーディングするときに便利なパターンですが、.NETに相当するものはありますか?

+0

私は利点が表示されていない、あなたはELI5を喜ばせることができますか? (私はあなたが欲しいものは知っていますが、私は理由はわかりません) – jnovacho

+0

このパターンでは、実際には "洗練された"列挙を実装することができます。これは本当に便利です。あなたは抽象クラスのための特定の数の実装だけがあることを保証することができます – Edmondo1984

+0

ああ私が参照してください!ありがとう。 – jnovacho

答えて

21

これをシミュレートする唯一の方法は、抽象クラスにプライベートコンストラクタを持ち、ネストされたクラスとして実装を提供することです。

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

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

+1。または、抽象クラス 'internal'のコンストラクタをマークすることは、クラスのために得ることのできるもう1つの同様のオプションです。 –

関連する問題