将属性放入抽象类
本文关键字:抽象类 属性 | 更新日期: 2023-09-27 18:07:10
这是我现在的情况:
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中,并作为FirstClass和SecondClass的覆盖。虽然唯一的区别是传递参数(samplestring)。
问题:是否有可能将这个函数放在某个地方(可能在SampleClass),并从第一/第二类传递覆盖的字符串到这个函数,以避免开销?
是。您通常想要做的是声明子类必须定义为抽象的东西(因此继承类必须覆盖它们)。属性也可以是抽象的:
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();
当然。
将runStoredProcedure(在基类中)的访问修饰符更改为protected。这样你就可以从你的派生类中访问它。
protected void runStoredProcedure(string sampleString)
{
SQLClass.ExecuteStoredProcedure(sampleString)
}
好的,我想我知道你在说什么,所以让我重申一遍,只是为了更清楚。
基类A具有属性A子类B覆盖属性a子类C重写属性a
你想要能够调用相同的方法从B和C传递正确的值从属性A基于类?
在基类A中添加方法
MyMethod(string value)
{
// Do Stuff
}
在你的子类
中MyMethod(this.PropertyA);
话虽如此,你为什么要这么做?当你从基类继承时,属性A属于子类,你可以在子类内将其设置为你想要的任何值。在这种情况下,我通常在子类中设置值或使用接口。