【发布时间】:2014-09-17 23:18:39
【问题描述】:
以下 C# 程序是使用抽象类编写的:
dBase.cs
using System;
namespace nmsD
{
public abstract class dBase
{
protected string s_dBase { get; set; }
protected abstract void methodX();
public dBase()
{
Console.WriteLine("Construc_dBase");
}
public void Dq1 ()
{
string s = s_dBase;
Console.WriteLine("Dq1" + " : " + s);
methodX();
}
}
}
bBase.cs
using System;
using nmsD;
namespace nmsB
{
public abstract class bBase: dBase
{
public bBase()
{
s_dBase = "Prop.bBase.01";
Console.WriteLine("Construc_bBase");
}
protected override void methodX(){
Console.WriteLine("--->bBase_methodX (NOT SHOW)");
}
}
}
bRegular01
using System;
using nmsD;
namespace nmsB
{
public class bRegular01 : bBase
{
public bRegular01()
{
Console.WriteLine("Construc_bRegular01");
//s_dBase = "Prop.bRegular02.02";
}
protected override void methodX()
{
Console.WriteLine("--->bRegular01_methodX (OK)");
}
}
}
bRegular02
using System;
using nmsD;
namespace nmsB
{
public class bRegular02 : bBase
{
public bRegular02()
{
Console.WriteLine("Construc_bRegular02");
s_dBase = "Prop.bRegular02.02";
}
protected override void methodX()
{
Console.WriteLine("--->bRegular02_methodX (OK)");
}
}
}
Program.cs
using System;
using nmsB;
namespace nmsApp
{
class Program
{
static void Main(string[] args)
{
nmsB.bRegular01 br01 = new nmsB.bRegular01();
br01.Dq1();
nmsB.bRegular02 br02 = new nmsB.bRegular02();
br02.Dq1();
Console.ReadKey();
}
}
}
输出为:
Construc_dBase
Construc_bBase
Construc_bRegular01
Dq1 : Prop.bBase.01
--->bRegular01_methodX (OK)
Construc_dBase
Construc_bBase
Construc_bRegular02
Dq1 : Prop.bRegular02.02
--->bRegular02_methodX (OK)
问题是:
如果可能,如何使用接口执行相同的行为? 获得此结果的最佳方法是什么?为什么?
编辑:
非常感谢您的回答。基于第一个答案,为了更好地理解,主要目标是: 当从 Dq1 调用方法 methodX() 时。输出必须只显示以下行:
--->bRegular01_methodX (OK)
or
--->bRegular02_methodX (OK)
不一定要显示分界线:
--->bBase_methodX (NOT SHOW)
【问题讨论】: