如何定义由子类使用的常量?

我需要定义一些将被基类及其子类使用的常量。 不知道什么是定义它们的正确方法。

我了解常量,只读,静态常量,以及公共,受保护和私有的差异(虽然我很少在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

如果常量要在课程之外使用,那么它们需要是internalpublic 。 如果只有基类和它的后代将要使用它们,那么就要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?

下一篇: Protected readonly field vs protected property