How to define the constants the used also by the subclass?
我需要定义一些将由基类及其子类使用的常量。不确定定义它们的正确方法。
我理解const、readonly、static const以及public、protected和private(虽然我很少在c中看到protected)。如何定义这些常量?它们应该是public const、public readonly、private constant或private readonly,并使用public getter/setter来使用子类,还是应该定义为protected?
另一个问题是关于基类中的变量filepath。filePath将被基类中的一些函数用作占位符(实际值将由子类提供),我是否应该将其定义为虚拟的?
有人能提供一般规则来遵守吗?以下是我的一个例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | public class BaseClass { public const string Country ="USA"; public const string State ="California"; public const string City ="San Francisco"; public virtual string FilePath { get { throw new NotImplementedException(); } set { throw new NotImplementedException(); } } } public class Class1 : BaseClass { public Class1() { FilPath ="C:\test"; } public string GetAddress() { return City +"," + State +"," + Country; } public void CreateFile() { if (!Directory.Exist(FilePath)) { //create folder, etc } } } |
如果您可以将常量定义为
如果常量要在类之外使用,那么它们必须是
如果子类可以提供
我将把baseclass设置为抽象类(参见http://msdn.microsoft.com/en-us/library/sf985hc5(v=vs.71.aspx)。至于常量与静态只读,主要是一个味觉问题。
1 2 3 4 5 6 7 | public abstract class BaseClass { // ... constant definitions // Members that must be implemented by subclasses public abstract string FilePath { get; set; } } |