【发布时间】:2011-06-07 04:03:01
【问题描述】:
我正在尝试让这个工作: http://drwpf.com/blog/2009/03/17/tips-and-tricks-making-value-converters-more-accessible-in-markup/
我从我们有基类的 cmets 获取代码,然后从它派生。但是,当我这样处理时出现错误:
public abstract class ConverterMarkupExtension: MarkupExtension, IValueConverter where T: class, new()
{
private static T m_converter = null;
public override object ProvideValue(IServiceProvider serviceProvider)
{
return m_converter ?? (m_converter = new T());
}
#region IValueConverter Members
public abstract object Convert(object value, Type targetType, object parameter, CultureInfo culture);
public abstract object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture);
#endregion
}
它说“在非泛型声明中不允许使用约束。我将其更改为:
public abstract class ConverterMarkupExtension<T>: MarkupExtension, IValueConverter where T: class, new()
这似乎解决了它,但我不能从这个类派生
public class BytesToKBValueConverter : ConverterMarkupExtension
{
public override object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value != null && value is double)
{
double bytes = System.Convert.ToDouble(value);
return bytes / 1024.0d;
}
else
return value;
}
public override object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotSupportedException();
}
}
这里出现错误:
错误 1 使用泛型类型 'IDATT.Dispatch.ConverterMarkupExtension' 需要 1 种 参数 C:\SVN\IDATT\Code\IDATT.Dispatch\ValueConverters.cs 29 44 IDATT.Dispatch
另外,有人能解释一下“where T: class, new”是什么意思吗?我刚刚开始了解泛型,但不确定这种特定语法的作用。
【问题讨论】:
标签: c# wpf generics ivalueconverter