我正在寻求创建一个BaseClass<TResponse, TRequest> where TRequest IsWorkable
,该功能具有在流程中转换IsWorkable
的功能。
我的难题是如何强制BaseClass
的后代遵守接口,该接口在基类上强制执行函数调用约定,而不必在基类的所有后代上声明接口。我想避免用BaseClass
装饰class NewClass : BaseClass<TResponse, TRequest>, IBase<TResponse, TRequest>
的所有后代。
我宁愿使用NewClass : BaseClass<NewRequest, NewResponse>
。
令人困惑的修改 这是基类的定义,我可以以某种方式将接口从基类投影到超类上吗?
BaseClass<TResponse, TRequest>, IBaseClass<TResponse, TRequest> where TRequest IsWorkable
答案 0 :(得分:2)
对于诸如WPF中的Converters之类的东西,我必须做很多事情,它们具有很多核心功能。
我的一般方法是足够泛化基类,以便我可以创建一个具有减少的参数的新方法并将其标记为abstract
,然后从基类中调用该方法。这意味着任何继承都必须实现新方法。
BaseConverter.cs:
public class BaseConverter<TConvert, TConvertBack> : IValueConverter
{
protected CultureInfo CurrentCulture { get; set;}
public virtual object Convert(object value, Type targetType, object parameters, CultureInfo culture)
{
CurrentCulture = culture;
// Generic methods to check types and conversions....
var typedValue = (TConvert)value;
return Convert(typedValue, targetType, parameters);
}
protected abstract Convert(TConvert value, Type targetType, object parameters);
/// Implement rest of interfaces/generic
}
StringToBooleanConverter.cs:
public class StringToBooleanConverter : BaseConverter<string, bool>
{
protected override object Convert(string value, Type targetType, object parameters)
{
bool retVal = false;
// Convert string to boolean and assign to retVal
return retVal;
}
}