[英]C# overriding an interface contract method of a base class
我創建了一個使用IValueConverter接口和InConverter的轉換器類。 它綁定到一個DataGrid,並傳遞一個字符串數組,在字符串中確定該值是否在數組中。
[ValueConversion(typeof(int), typeof(bool))]
public class InConverter : IValueConverter
{
public object Convert(object value, Type type, object parameter, CultureInfo info)
{
String str = value as String;
String[] compareList = parameter as String[];
if (str != null)
{
foreach (String compare in compareList)
{
if (str == compare)
return true;
}
}
return false;
}
public object ConvertBack(object value, Type type, object parameter, CultureInfo info)
{
throw new NotImplementedException();
}
}
我還有一個名為NotItConverter的對流器類,該類本質上返回InConverter的反面,我不想擁有冗余代碼。 所以,我想象這樣做。
[ValueConversion(typeof(int), typeof(bool))]
public class NotInConverter : InConverter
{
public object Convert(object value, Type type, object parameter, CultureInfo info)
{
return !(Boolean)base.Convert(value, type, parameter, info);
}
public object ConvertBack(object value, Type type, object parameter, CultureInfo info)
{
throw new NotImplementedException();
}
}
但是,這不起作用。 使它不加任何警告就可以編譯的唯一方法是,使NotInConverter中的方法指定重寫,並且使InConverter中的方法指定虛擬。 有沒有更簡單的方法可以做到這一點?
您需要在派生類中重新指定接口:
public class NotInConverter : InConverter, IValueConverter
這將導致編譯器為派生類創建單獨的接口映射。
證明:
static void Main()
{
ITest x = new TestDerived();
x.Name();
}
interface ITest {
void Name();
}
class TestBase : ITest {
public void Name() { Console.WriteLine("Base"); }
}
class TestDerived : TestBase, ITest {
public void Name() { Console.WriteLine("Derived"); }
}
此打印Derived
。
我認為這是兩種建議的結合:
public class NotInConverter : InConverter, IValueConverter
{
new public object Convert(...)
{
return !base.Convert(...);
}
new public object ConvertBack(...)
{
return !base.ConvertBack(...);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.