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

时间:2013-01-11 23:19:24

标签: c# .net const constants

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

我理解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 
        }
     }         
}

2 个答案:

答案 0 :(得分:3)

如果您可以将常量定义为const,那么就这样做。如果无法做到这一点,请使用static readonly

如果要在课堂外使用常数,则需要internalpublic。如果只有基类及其后代将使用它们,那么将它们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; }
}