我想为某些第三方代码创建一个继承的类,但我却无法以我想要的方式实现它。
下面的代码是我想要做的粗略指南。
// 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
}
}
比那个例子显示的要多得多,但这是我面临的具体问题的一个基本例子。第三方代码需要很多设置,我只想将所有内容包装在一个简单的构造函数中,但仍然能够调用基类的公共方法,而不必为每个方法编写一个包装器。
有没有合理的方法可以做到这一点,还是我完全咆哮错误的树?
答案 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