создайте функцию mustoveride с кодом в ней

#c# #.net #vb.net #inheritance

#c# #.net #vb.net #наследование

Вопрос:

У меня есть MustInherit класс с некоторыми MustOveride методами в нем. Когда я наследую форму этого класса, я автоматически получаю MustOveride методы или свойства.

Мой вопрос в том, что я хочу иметь возможность наследовать от класса мои MustOveride функции и методы, но затем с некоторым кодом, который уже есть в нем. Однажды я видел класс .net, который делал это, когда я унаследовал от этого класса методы с некоторыми комментариями в нем.

У кого-нибудь есть идея, что я имею в виду? (Это немного сложно описать 😉 )

Комментарии:

1. Не могли бы вы немного пояснить, пожалуйста, что вы имеете в виду, говоря «получили методы с некоторыми комментариями»?

Ответ №1:

Я думаю, что то, что вы описали, известно как шаблон метода шаблона:

  public abstract class MyClass
 {
      public void SomeMethod()
      {
           // code
           MustInherit();
           // code
      }

      protected abstract void MustInherit();
  }
  

Создайте метод, который не будет переопределяться SomeMethod в этом примере, и поместите весь обычный код в этот класс. Затем создайте абстрактный метод, который должен быть переопределен.

Если вы хотите предоставить реализацию по умолчанию, поэтому метод не должен переопределяться, но может быть использовано virtual ключевое слово.

  public abstract class MyClass
 {
      public void SomeMethod()
      {
           // code
           MustInherit();
           // code
      }

      protected virtual void CanInherit()
      {
           // default implementation
      }
  }
  

Ответ №2:

Я предполагаю, что вы хотите сделать следующее:
Когда вы наследуете от этого абстрактного базового класса, вы хотите, чтобы эти абстрактные методы уже частично были реализованы в вашем классе.
Это невозможно из коробки. Этого можно было бы достичь с помощью некоторых шаблонов, но это не имеет ничего общего с C # или VB.NET но с используемой IDE.

Единственное, что вы можете сделать, это создать этот метод как virtual (C # — я не знаю, как он вызывается в VB.NET ) в базовом классе и вызовите базовую реализацию в производном классе.

Комментарии:

1. Да, это именно то, что я пытался сделать. К сожалению, я ожидал этого ответа ;), в любом случае спасибо

Ответ №3:

Абстрактный класс для вашего сервиса 🙂 Если вам нужно, чтобы потребитель вашего абстрактного класса наверняка проверял некоторые методы, тогда пометьте их также как абстрактные. Если вам нужно просто предоставить возможность проверки ваших методов, но это не обязательно, тогда пометьте их как виртуальные.

Комментарии:

1. -1: abstract является ли C # эквивалентом VB.NET MustInherit .

Ответ №4:

С ключевым словом virtual вас не заставляют реализовывать унаследованный метод, тогда он будет использовать реализацию базового класса по умолчанию. Таким образом, вы как бы наследуете весь код от базового метода.

В противном случае вы можете реализовать свою собственную производную версию метода и где-нибудь в нем вызвать версию метода базового класса : base.MethodName(...); . Это позволяет вам снова как бы наследовать весь код базового метода, но на этот раз с дополнительным кодом до и после, который специфичен для вашего производного класса.

В противном случае вы можете создать метод вашего базового класса таким, чтобы он использовал делегаты в своем коде, и вызывать его здесь и там. Таким образом, фундаментальное функционирование метода базового класса остается одинаковым для всех производных классов, но каждый производный класс предоставляет своих собственных делегатов для настройки некоторых ключевых блоков кода в методе базового класса.

В противном случае, если вы хотите увидеть частично реализованные методы с комментариями здесь и там, например, Добавьте свой код сюда, обычно это вопрос кода, сгенерированного внешним инструментом, таким как Visual Studio или другой IDE, и не имеет ничего общего с самим языком.

Но, как вы видите, существует множество возможностей, в зависимости от того, что именно вы хотите…