Можно ли наследовать конструкторы, и если да, то как? Я пытаюсь создать класс, который наследует класс System, и я хочу его конструкторы.Наследующие конструкторы?
ответ
Это невозможно в ваниле 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) { ... }
}
Параметрические конструкторы являются исключением из этого правила. Если у вас нет другого конструктора, они определяются автоматически, вызывая конструктор без параметров в базовом классе. Это означает, что вам не нужно переопределять их на каждом уровне. – svick
Конструкторов не «наследует» таким же образом, что методы делать, но у вас есть возможность ссылающихся конструкторов базового класса:
public DerivedClass(Foo foo) : base(foo)
Вы не можете наследовать конструкторы; вы должны вызвать их в явном виде (для конструктора по умолчанию, который называется, ну, за исключением, по умолчанию):
class A
{
public A (int i) { }
}
class B : A
{
public B (int i) : base (i) { }
}
Все остальные ответы до сих пор являются правильными. Тем не менее, понять, что вы не должны соответствовать подписи конструктора базового класса с конструктором вы определяете:
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. C#: наследующие конструкторы
- 2. Наследующие конструкторы java
- 3. C++ 11 наследующие конструкторы шаблонов
- 4. наследующие конструкторы из базового класса?
- 5. Наследующие конструкторы и инициализаторы с равными равными
- 6. Почему наследующие конструкторы не поддерживаются всеми существующими компиляторами C++?
- 7. C++ Наследующие конструкторы с несколькими параметрами [Домашнее задание]
- 8. Наследующие свойства от DisplayObject
- 9. Наследующие свойства без наследства
- 10. Ссылки, наследующие размер div
- 11. возникли проблемы, наследующие базовый класс
- 12. Атрибуты класса Python, не наследующие
- 13. методы init, наследующие от CCNode
- 14. Проблемы, наследующие внутренний класс java
- 15. Конструкторы, вызывающие другие конструкторы, выдает ошибку
- 16. специализированные конструкторы шаблона не видели, как конструкторы
- 17. класса конструкторы, перегруженные конструкторы и объект инициализации
- 18. Как статические конструкторы и частные конструкторы отличаются?
- 19. BEM и наследующие свойства других классов
- 20. Наследующие и переопределяющие функции std :: string?
- 21. Jenkins - Наследующие переменные среды на Ubuntu
- 22. классы python, наследующие друг от друга
- 23. Pygame: пользовательские классы, наследующие от pygame.Surface
- 24. модели класса Backbone не наследующие по умолчанию
- 25. Дочерние элементы, наследующие родительский атрибут через VBA
- 26. Наследующие методы, которые запускают неотпределяющий критический раздел
- 27. Домены Grails, наследующие абстрактные классы hasMany
- 28. Страницы коллекции, не наследующие стиль по умолчанию
- 29. Публичные структуры, наследующие частную структуру C++
- 30. элементы списка, не наследующие стили от родителей
Нет, вы можете иметь VS или R # (или другое аналогичное) расширение AutoGenerate конструктор для каждого базового конструктора, хотя. – millimoose
Как бы я сделал это в VS? –
Кажется, что я думал о функции Resharper. Если у вас есть это, это находится под 'Resharper> Edit> Generate Code ...'. Если нет, вам придется писать конструкторы самостоятельно, как показывает ответ Эрика. – millimoose