c# - 最佳实践 - 在派生类中设置继承变量

标签 c# .net inheritance constructor abstract-class

我有一个抽象类,其中包含依赖于类级变量的方法。但是,这些变量的值是在从抽象继承的类中设置的。

我写这个是为了在构造函数中设置变量——这似乎是迄今为止最巧妙的事情。但我对此隐约感到不舒服——它们看起来应该是抽象属性。我只是想不通为什么会有这种感觉。

这是我实际所做的一个简化示例:

public abstract class TestBase
{
    protected string itemType;
}

public class TestClass1 : TestBase
{
    public TestClass1()
    {
        itemType = ConfigurationManager.AppSettings["TestClass1.ItemType"];
    }
}

public class TestClass2 : TestBase
{
    public TestClass2()
    {
        itemType = ConfigurationManager.AppSettings["TestClass2.ItemType"];
    }
}

所以,问题是:

1) 这是不好的做法吗?

2) 如果是这样,为什么,什么更好?

3) 这是一个测试类,用于回归测试而不是部署到任何地方。是否有充分的理由像示例中那样在配置中设置我的类级变量,或者可以对它们进行硬编码吗?默认情况下,我总是倾向于配置。

干杯, 马特

最佳答案

您可以将数据传递给正确的构造函数:

public abstract class TestBase
{
    protected string itemType;    // can now become 'readonly`

    protected TestBase(string keyName)
    {
       itemType = ConfigurationManager.AppSettings[keyName];
    }
}

public class TestClass1 : TestBase
{
    public TestClass1() : base("TestClass1.ItemType")
    {
        //itemType = ConfigurationManager.AppSettings["TestClass1.ItemType"];
    }
}

这样它会更加一致并且不会那么容易忘记一个项目。

关于c# - 最佳实践 - 在派生类中设置继承变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16058356/

相关文章:

c# - 与 System.Windows.Forms.Timer 的间隔不一致

Java:this 指向方法的调用者,但指向变量的当前类。为什么?

.net - 继承和 List<> 的问题

c++ - 类成员标识符的解析如何在 C++ 中工作

c# - 我以前从未见过的新 MEF 错误 -- "The export is not assignable to type..."

c# - FormsAuthentication 对象已过时 [使用 MVC5]

c# - 以编程方式创建 CAD 文件

c# - 持久集合和标准集合接口(interface)

c# - .Net 4.0 框架和 4.5 框架之间的区别?

c# - 有没有办法在 C# 中获取两组对象之间的差异