如何在使用基类时通过接口强制实施函数调用约定



我希望创建一个具有在流中传输IsWorkable功能的BaseClass<TResponse, TRequest> where TRequest IsWorkable

我的挂断是如何强制BaseClass的后代遵守在基类上强制执行函数调用约定的接口,而不必在基类的所有后代上声明接口,也就是说,我想避免用class NewClass : BaseClass<TResponse, TRequest>, IBase<TResponse, TRequest>装饰BaseClass的所有后代。

我宁愿NewClass : BaseClass<NewRequest, NewResponse>

令人困惑的编辑这是基类定义,我可以以某种方式将接口从基类投影到超类上吗?

BaseClass<TResponse, TRequest>, IBaseClass<TResponse, TRequest> where TRequest IsWorkable

对于WPF中的转换器之类的东西,我不得不做很多事情,它们共享许多核心功能。

我的一般方法是对基类进行足够的泛化,以便我可以创建一个具有减少参数的新方法并将其标记为abstract,然后从基类调用该方法。这意味着任何继承都必须实现新方法。

基本转换器.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;
}
}

最新更新