0

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

我了解 const、readonly、static const 以及 public、protected 和 private 的区别(虽然我很少看到在 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 
        }
     }         
}
4

2 回答 2

3

如果您可以定义常量,const那么就这样做。如果这不可能,请使用static readonly.

如果要在类之外使用常量,那么它们需要是internalor public。如果只有基类及其后代要使用它们,那么请制作它们protected

如果FilePath 可以由子类提供,那么它必须是virtual. 如果它必须由子类提供,它应该是abstract.

于 2013-01-11T23:29:38.170 回答
0

我会让 BaseClass 成为一个抽象类(参见http://msdn.microsoft.com/en-us/library/sf985hc5(v=vs.71).aspx)。至于 const 与 static readonly,主要是口味问题。

public abstract class BaseClass
{
    // ... constant definitions

    // Members that must be implemented by subclasses
    public abstract string FilePath { get; set; }
}
于 2013-01-11T23:29:23.707 回答