关于c#:在这种情况下,继承的重点是什么?

What's the point of inheritance in this case?

我有几个类必须先连接到某个对象,然后才能执行任何操作。所以理想情况下,我用一个带有1个参数的构造函数创建一个基类。然后这些类从这个基类继承,如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public class BaseErase
{
    private string _connectionString;
    public string ConnectionString
    {
        get
        {
           return _connectionString;
        }
        set
        {
           _connectionString = value;
        }
    }

    public BaseErase(string connectionString)
    {
        ConnectionString = connectionString;
    }

    //public void SetConnection(string connectionString)
    //{
    //    ConnectionString = connectionString;
    //}
}

然后,派生类将从baseerase继承,如下所示:

1
2
3
4
5
6
7
8
class ToEraseClass : BaseErase
{
    public void GetData()
    {
        string connect = ConnectionString;
        Console.WriteLine(connect);
    }
}

最后,我实例化类并调用getData():

1
2
ToEraseClass toErase = new ToEraseClass(ConnectionString);
toErase.GetData();

不幸的是,构造函数不是继承的,所以这些都不起作用。我知道解决这个问题的方法,但它要求我修改每个类。

我的问题是,这里继承的目的是什么?

谢谢。


编辑:在下面的反应:你的评论

In that case, I can just as easily add a method in every class

这是什么做的案例中的继承是消除需要添加在每一个类的方法。因为如果你在每一个类的方法),然后你要保持每一个类的方法。

代码重复的代码是一个非常强大的味道,你应该尽快消除展望

为了消除duplication你可以添加你的关系,例如,"这是connectionfangler类的所有类的基准来管理他们的橡皮擦连接。或是你可以讨论的关系,是通过添加一个fangles基类创建的连接。

如果你所有的基类是做的是设置连接字符串,然后我会说,有一点是在继承。应该是关于一个继承的关系,和不有关系。

因为它看来,你想添加到构造函数调用的基础。

如果你要确保每一个类型的类连接字符串有一擦除,你可以让他们实现一个接口已经是房地产

1
2
3
4
public IEraseConnection
{
  string ConnectionString {get;set;}
}

然后你可以设置连接字符串的构造函数或直接。如果你的应用程序的最佳作品,以较高者为准。

如果你想使用的是完整的基础类的东西,然后我会像这样:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
using System;

namespace ExampleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            new ToEraseClass("Boom!").GetData();
            Console.ReadLine();
        }
    }

    public class BaseErase
    {
        protected string ConnectionString
        {
            get; private set;
        }

        public BaseErase(string connectionString)
        {
            ConnectionString = connectionString;
        }
    }

    public class ToEraseClass : BaseErase
    {
        public ToEraseClass(string connectionString) : base(connectionString)
        {}

        public void GetData()
        {
            Console.WriteLine(ConnectionString);
        }
    }
}