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()方法.
这样做的方法是使用模板方法模式:
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哪个委托给具体的子类来获得正确的位.
不,没有办法做到这一点。您需要在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)