这就是我现在所拥有的:
public abstract class SampleClass
{
public abstract void ShowAll();
public abstract void ExecuteById(int id);
public string sampleString{get;}
}
public sealed class FirstClass : SampleClass
{
public override string sampleString
{
get { return "AA"; }
}
public override void ShowAll()
{
......
}
public override void ExecuteById(int id)
{
......
}
}
public sealed class SecondClass : SampleClass
{
public override string sampleString
{
get { return "BB"; }
}
public override void ShowAll()
{
......
}
public override void ExecuteById(int id)
{
......
}
}
现在我为每个类添加一个这样的函数
public void runStoredProcedure(string sampleString)
{
SQLClass.ExecuteStoredProcedure(sampleString)
}
其中一种方法是将此作为抽象添加到sampleClass,并作为ovverride添加到FirstClass和SecondClass。唯一的区别是传递参数(samplestring)。
问题:是否可以将此函数放在某处(可能在SampleClass中)并将覆盖字符串从First / Second类传递给此函数以避免开销?
答案 0 :(得分:3)
是。你通常想要做的是声明孩子必须定义为抽象的东西(所以继承类必须覆盖它们)。属性也可以是抽象的:
public abstract class MyBase {
public void Execute() {
Console.WriteLine(MyString);
}
// Notice that this has no body, because it is abstract. Also, I don't need a setter.
protected abstract String MyString { get; }
}
public class MyChild : MyBase {
protected String MyString { get { return "Foo"; } }
}
public class MyOtherChild : MyBase {
protected String MyString { get { return "Bar"; } }
}
然后你可以这样做:
var myChild = new MyChild();
// Prints "Foo"
myChild.Execute();
var myOtherChild = new MyOtherChild();
// Prints "Bar"
myOtherChild.Execute();
答案 1 :(得分:0)
不确定。这是一个抽象类的重点。
答案 2 :(得分:0)
将runStoredProcedure(在基类中)的访问修饰符更改为protected。这样你就可以从派生类中访问它。
protected void runStoredProcedure(string sampleString)
{
SQLClass.ExecuteStoredProcedure(sampleString)
}
答案 3 :(得分:-1)
好的,我想我知道你在说什么,所以让我重新说明一下。
基础A类有PropertyA 子类B优先于PropertyA 子类C覆盖PropertyA
您希望能够从B和C调用相同的方法,根据类传递属性A中的正确值吗?
在基础类A中添加方法
MyMethod(string value)
{
// Do Stuff
}
在子类中
MyMethod(this.PropertyA);
有人说你为什么试图这样做?当您从基类继承时,属性A属于SubClass,您可以将其设置为子类内所需的任何值。在这种情况下,我通常在子类中设置值或使用接口。