如何定义由子类使用的常量?
我需要定义一些将被基类及其子类使用的常量。 不知道什么是定义它们的正确方法。
我了解常量,只读,静态常量,以及公共,受保护和私有的差异(虽然我很少在C#中使用“protected”)。 应如何定义这些常数? 他们应该是公共常量,或公共只读,或私人常量,或私人只读,并使用公共getter / setter的子类使用,或者他们应该被定义为受保护的?
另一个问题是关于BaseClass中的变量FilePath。 FilePath将被BaseClass中的一些函数用作占位符(实际值将由子类提供),我应该将其定义为虚拟吗?
有人可以提供遵循的一般规则吗? 以下是我拥有的一个例子:
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
}
}
}
如果你可以将常量定义为const
那就这样做。 如果这是不可能的,去static readonly
。
如果常量要在课程之外使用,那么它们需要是internal
或public
。 如果只有基类和它的后代将要使用它们,那么就要protected
它们。
如果FilePath
可以由子类提供,那么它必须是virtual
。 如果它必须由子类提供,它应该是abstract
。
我会让BaseClass成为一个抽象类(请参阅http://msdn.microsoft.com/en-us/library/sf985hc5(v=vs.71).aspx)。 至于常量与静态只读,其主要是味道的问题。
public abstract class BaseClass
{
// ... constant definitions
// Members that must be implemented by subclasses
public abstract string FilePath { get; set; }
}
链接地址: http://www.djcxy.com/p/21081.html
上一篇: How to define the constants the used also by the subclass?