具有不同构造函数的继承类

时间:2014-04-10 11:01:40

标签: c# .net-3.5

我想为某些第三方代码创建一个继承的类,但我却无法以我想要的方式实现它。

下面的代码是我想要做的粗略指南。

// 3rd party class
public class BaseClass
{
    public BaseClass(string Value1, string Value2)
    {
        // constructor does stuff with values
    }
    public string Method1()
    {
        // return value1
    }
    public string Method2()
    {
        // return value2
    }
}

// my class
public class SubClass : BaseClass
{
    public SubClass(string Key)
    {
        // decrypt key to get Value1 and Value2
        // create BaseClass(Value1, Value2)
    }
    public MyNewFunction(string Value)
    {
        // this is a function I've added, extending the base class
    }
}

比那个例子显示的要多得多,但这是我面临的具体问题的一个基本例子。第三方代码需要很多设置,我只想将所有内容包装在一个简单的构造函数中,但仍然能够调用基类的公共方法,而不必为每个方法编写一个包装器。

有没有合理的方法可以做到这一点,还是我完全咆哮错误的树?

2 个答案:

答案 0 :(得分:2)

我不会这样做,我会用工厂代替。工厂的想法是将对象的创建远离用户代码,如果您需要更改某个对象的创建方式,您只需要查看工厂。

另请查看factory pattern。通常,在创建对象时尝试使用创建模式,可以找到一些at this link given the GoF creational patterns.(GoF设计模式(四个一组)是面向对象模式的最佳读取之一)

像这样:

public class BCFactory {
  public SubClass CreateInstance(string key)
  {
     var val1 = GetVal1FromKey(key);
     var val2 = GetVal2FromKey(key);
     // create the actual instance of the subclass
     var instance = new SubClass(val1, val2);

     return instance;
  }
}

public class SubClass {
   public SubClass(string val1, string val2) : base(val1, val2)
   {
      // Do nothing, we just instantiate the base class.
   }
}

像这样使用:

var key = // your data
var factory = new BCFactory();
var instance = factory.CreateInstance(key);

答案 1 :(得分:0)

您可以在基础构造函数调用中使用static方法调用来操作数据。此示例将说明如何:

void Main()
{
    new SubClass("somekey");
}

public class BaseClass
{
    public BaseClass(string Value1, string Value2)
    {
        Console.WriteLine (Value1 + "\t" + Value2);
    }
}
public class SubClass : BaseClass
{
    public SubClass(string Key) : base(Key, Decrypt(Key))
    {

    }

    static string Decrypt(string val){
        return val + "_decrypted";
    }
}

打印

  

somekey somekey_decrypted