我有一些C#类,其中包含一个创建我需要的字符串的方法。 2个类是相同的,但是1个类的不同之处:
public class Base
{
public abstract bool GetAction(out string res);
}
// There is another class B which does the same
public class A : Base
{
public override bool GetAction(out string res)
{
...
string str1 = some logic to get a string needed
string str2 = some logic to get another string needed
res = str1 + str2;
...
}
}
public class C : Base
{
List<Configs> configs;
...
public override bool GetAction(out string res)
{
...
for(int i = 0 ; i < configs.size(); i++)
{
string str1 = some logic to get string based on configs[i].cfgString;
string str2 = some logic to get another string based on configs[i].cfgString;
res = res + configs[i].cfgString + str1 + str2; //immutable string is not the issue here so please ignore it
}
}
现在需要自己获取str1
和str2
。
我开始创建一个返回类,而不是像这样的GetAction
方法的bool:
public StringsInfoClass
{
public string Str1 { get; set; }
public string Str2 { get; set; }
...
public string ToString()
{
return Str1 + Str2;
}
}
问题是A类和B类确实只有一个Str1
和Str2
,而C类可以有几个Button
和Button
。由于它们派生自相同的基类,因此用户将期望相同的接口。
您认为这个问题的良好实施可能是什么?
答案 0 :(得分:0)
如此简单,更具体地说,问题是,方法getAction()
需要相同的返回类型,但A类和B类需要StringInfo
作为返回类型,而C类需要List<StringInfo>
}。
解决方案正在使用generics。
public class Base<T>
{
public abstract T GetAction(out string res);
}
public class A : Base<StringInfo>
{
public override StringInfo GetAction(out string res)
{
//implementation
}
}
public class C : Base<List<StringInfo>>
{
public override List<StringInfo> GetAction(out string res)
{
//implementation
}
}
最后,如果你想使StringInfo
更具可扩展性,你可以使用该类的抽象。如果您希望将来采用不同的行为,那么为toString()
方法添加不同的逻辑会有所帮助。