コンストラクタを継承することはできますか? Systemクラスを継承するクラスを作成しようとしています。そのクラスのコンストラクタが必要です。コンストラクタを継承しますか?
1
A
答えて
7
これはバニラC#では不可能です。コンストラクタは単純に継承することはできません。それらはすべてのレベルで再定義され、親バージョンに連鎖されなければなりません。
class Parent {
internal Parent(string str) { ... }
internal Parent(int i) { ... }
}
class Child : Parent {
internal Child(string str) : base(str) { ... }
internal Child(int i) : base(i) { ... }
}
+4
しかし、無引数コンストラクタはこのルールの例外です。他のコンストラクタがない場合、それらは自動的に定義され、基本クラスのパラメータのないコンストラクタを呼び出します。つまり、すべてのレベルでそれらを再定義する必要はありません。 – svick
4
コンストラクタは、「継承」メソッドが行うのと同じ方法ではありませんが、あなたは、基本クラスのコンストラクタを呼び出すためのオプションを持っている:
public DerivedClass(Foo foo) : base(foo)
1
あなたはコンストラクタを継承することはできません。 (デフォルトでは、デフォルトのコンストラクタと呼ばれるデフォルトのコンストラクタを除いて)明示的に呼び出す必要があります。
class A
{
public A (int i) { }
}
class B : A
{
public B (int i) : base (i) { }
}
2
これまでのその他の回答はすべて正しいです。しかし、あなたが定義されているコンストラクタで基底クラスのコンストラクタのシグネチャと一致する必要がないことを理解する:
public class Base
{
public Base(string theString) { ... }
}
public class Derived:Base
{
public Derived():base("defaultValue") //perfectly valid
{ ... }
public Derived(string theString)
:base(theString)
{ ... }
public Derived(string theString, Other otherInstance)
:base(theString) //also perfectly valid
{ ... }
}
...と親クラスのコンストラクタを呼び出すことに加えて、することもでき、「オーバーロード」のコンストラクタ内で同じ継承レベルは、this
キーワードを使用して:
public class FurtherDerived:Derived
{
public FurtherDerived(string theString, Other otherInstance)
:base(theString, otherInstance)
{ ... }
public FurtherDerived()
:this("defaultValue", new Other()) //invokes the above constructor
{ ... }
}
関連する問題
- 1. Java継承/コンストラクタ
- 2. のJava:継承コンストラクタ
- 3. Subclassコンストラクタは、スーパークラスコンストラクタから変数を継承しますか?
- 4. スーパークラスからコンストラクタを継承していますか?
- 5. 継承クラスのジェネリックとコンストラクタ
- 6. スカラのコンストラクタ、ロジックと継承
- 7. Javaの継承とコンストラクタ
- 8. Javaコピーのコンストラクタと継承
- 9. コンストラクタのパラメータと継承
- 10. PHPのコンストラクタの継承
- 11. C++ publicコンストラクタのみ継承
- 12. 継承コンストラクタのインスタンス化
- 13. C#のマルチレベル継承コンストラクタ
- 14. 継承と複数のコンストラクタ
- 15. C#Baseコンストラクタの継承
- 16. スーパークラスの継承とコンストラクタ
- 17. 継承と基底コンストラクタ
- 18. Java継承コンストラクタの問題
- 19. スカラ:継承のコンストラクタ命令
- 20. スーパークラス/継承/コンストラクタの使用
- 21. 継承親コンストラクタ引数
- 22. C#でコンストラクタのドキュメントを継承していますか?
- 23. JavaScriptコンストラクタは関数を返し、継承できますか?
- 24. コンストラクタと継承を移動する
- 25. コンストラクタをプライベート継承で公開する
- 26. Ninjectでコンストラクタを継承する
- 27. javaでコンストラクタを継承する
- 28. 継承:コンストラクタは "super"を実行しませんか?
- 29. サブクラスはコンストラクタを継承できますか?
- 30. Java - コンストラクタに関する継承
号あなたはかかわらず、すべての基地コンストラクタのVSまたはR#(または他の同様の拡張)自動生成コンストラクタを有することができます。 – millimoose
私はVSでどうすればいいのですか? –
私が思っていたものはResharperの機能でした。もしあなたがそれを持っているなら、それは 'Resharper> Edit> Generate Code ... 'の下にあります。そうでない場合は、Erikの回答が示すようにコンストラクタを自分で記述する必要があります。 – millimoose