调用子类方法时强制调用父类方法 - C#.NE

6 c#

我们有两个班级说'父母'和'孩子',如下所示:

class Parent
{
   parent_AddUser()
    {
      // add user code for parent
    }

    abstract child_AddUser();
}

// child class 
class Child : Parent
{
  child_AddUser()      // implementing the abstract method
   { 
     // child addUser code  
   }
}
Run Code Online (Sandbox Code Playgroud)

我们想知道无论何时调用child_addUser()而不进行显式调用,我们是否都可以强制调用parent_AddUser()方法.

Jon*_*eet 9

这样做的方法是使用模板方法模式:

public abstract class Parent
{
    public void AddUser()
    {
        // Preparation goes here
        AddUserImpl();
        // Clean-up goes here
    }

    protected abstract void AddUserImpl();
}

public class Child
{
    protected override void AddUserImpl()
    {
        // Do stuff here
    }
}
Run Code Online (Sandbox Code Playgroud)

这种方式除了Parent调用之外没有人AddUserImpl- 调用者只是使用AddUser哪个委托给具体的子类来获得正确的位.


Joh*_*ers 1

不,没有办法做到这一点。您需要在child_AddUser 中添加对parent_AddUser 的调用。


您可以使用模板方法模式执行类似的操作。

public abstract class Parent {
    public void AddUser(User user) {
        // Do parent stuff
        AddUserImpl(user);
        // More parent stuff
    }

    protected abstract void AddUserImpl(User user);
}

public class Child {
    protected override void AddUserImpl(User user)
    {
        // Do child stuff
    }
}
Run Code Online (Sandbox Code Playgroud)