向类中继承自基类C#的每个方法添加一个可选参数

时间:2013-02-28 09:11:55

标签: c# oop

我不知道这是否可行,但我试图得到的是强迫从某个基类继承的开发人员在这个类的每个方法中实现一个特定的参数。

类似的东西:

class SomeClass : BaseClass
{
     public void SomeMethod(bool iAmAForcedParameter = false)
     {

     }
}

这样做的原因是我们有可以从MVC项目(我们的前端)调用的服务,或者可以从其他服务中使用。 如果将从前端调用该服务,则应在完成所有操作后将更改写入数据库。如果服务从另一个服务使用,它应该只进行更改(在内存中)而不是将它们写入数据库。

我的另一个想法是确定谁是调用者,如果他来自特定类型,则该方法不应该发送数据。但是,我不知道如何做到这一点,或者如果没有巨大的性能影响,甚至可能做到这一点。

提前问候并感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

  

在此类的每个方法中实现特定参数。

我认为你只是在课上寻找一个属性,然后你可以检查每个方法。

答案 1 :(得分:1)

奇怪的是,你的每个方法都有两个责任。我宁愿创建两个派生类。一种方法可以将数据保存到数据库,另一种方法则不包含:

class SomeInMemoryClass : BaseClass
{
   public override void SomeMethod() {}
}

class SomeSqlClass : BaseClass
{
   public override void SomeMethod() {}
}

无论如何 - 将布尔值传递给方法是一种设计气味。它告诉你的方法做了两件事。最好有两种方法,告诉来电者他们在做什么:

void SomeInMemoryMethod()
void SomeSqlMethod()

你不认为它比

更易于维护
void SomeMethod(false)

上次修改:将SomeInMemoryClass对象传递给不应将数据保存到数据库的类型。其他类型应使用SomeSqlClass个实例。

答案 2 :(得分:0)

我也不明白第二部分。

对于第一项,请使用

public void SomeMethod(bool iAmAForcedParameter)

所以没有可选参数。

如果您想要使用可选参数,请使用

public void SomeMethod(bool iAmAForcedParameter)
{
    SomeMethodX(iAmAForcedParameter)
}

public void SomeMethodX((bool iAmAForcedParameter = false)