我需要定义一些将由基类及其子类使用的常量。 不确定定义它们的正确方法是什么。
我理解const,readonly,static const以及public,protected和private之间的区别(虽然我很少看到“受保护”在C#中使用)。应该如何定义这些常量?它们应该是公共const,公共只读,私有常量还是私有只读,并使用公共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
}
}
}
答案 0 :(得分:3)
如果您可以将常量定义为const
,那么就这样做。如果无法做到这一点,请使用static readonly
。
如果要在课堂外使用常数,则需要internal
或public
。如果只有基类及其后代将使用它们,那么将它们protected
。
如果子类提供FilePath
,则必须为virtual
。如果必须由子类提供,则它应为abstract
。
答案 1 :(得分:0)
我会将BaseClass作为一个抽象类(参见http://msdn.microsoft.com/en-us/library/sf985hc5(v=vs.71).aspx)。至于const与静态只读,它主要是品味问题。
public abstract class BaseClass
{
// ... constant definitions
// Members that must be implemented by subclasses
public abstract string FilePath { get; set; }
}