可空引用类型和实现接口
Nullable reference type and implementing interfaces
当对 INotifyPropertyChanged 界面使用“实现界面”快速操作时,我得到了
class Test : INotifyPropertyChanged
{
public event PropertyChangedEventHandler? PropertyChanged;
}
可空引用类型是预期的,这迫使我使用 ?.Invoke()
而不是获取 NullReferenceException
.
但是 IValueConverter 是:
class Converter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
我希望到处都能看到 object?
方法参数和 return 类型。为什么不是?
我应该手动进行此更改吗?
我注意到的另一件事:
interface IA
{
object? Test(object? arg);
}
class A : IA
{
public object? Test(object? arg)
{
throw new NotImplementedException();
}
}
interface IB
{
object Test(object arg);
}
class B : IB
{
public object Test(object arg)
{
throw new NotImplementedException();
}
}
表示“实现接口”快速操作仅遵循接口定义中的方法签名。这是否意味着所有标准库接口的签名都需要更新?
我正在使用 VS2022 预览版 4 和 .Net 6.0 顺便说一句。
Does this means that the signature of all standard library interfaces needs to be updated?
是的,确实如此。
The .NET runtime APIs have all been annotated [for null-state static analysis] in .NET 5. You improve the static analysis by annotating your APIs to provide semantic information about the null-state of arguments and return values.
这就是您看到 PropertyChangedEventHandler?
的原因 INotifyPropertyChanged
;它已更新为包含所述注释。
不过,IValueConverterInterface
的最新版本是 Windows Desktop 5。从该页面,您可以看到它尚未更新以利用可空引用类型。
当对 INotifyPropertyChanged 界面使用“实现界面”快速操作时,我得到了
class Test : INotifyPropertyChanged
{
public event PropertyChangedEventHandler? PropertyChanged;
}
可空引用类型是预期的,这迫使我使用 ?.Invoke()
而不是获取 NullReferenceException
.
但是 IValueConverter 是:
class Converter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
我希望到处都能看到 object?
方法参数和 return 类型。为什么不是?
我应该手动进行此更改吗?
我注意到的另一件事:
interface IA
{
object? Test(object? arg);
}
class A : IA
{
public object? Test(object? arg)
{
throw new NotImplementedException();
}
}
interface IB
{
object Test(object arg);
}
class B : IB
{
public object Test(object arg)
{
throw new NotImplementedException();
}
}
表示“实现接口”快速操作仅遵循接口定义中的方法签名。这是否意味着所有标准库接口的签名都需要更新?
我正在使用 VS2022 预览版 4 和 .Net 6.0 顺便说一句。
Does this means that the signature of all standard library interfaces needs to be updated?
是的,确实如此。
The .NET runtime APIs have all been annotated [for null-state static analysis] in .NET 5. You improve the static analysis by annotating your APIs to provide semantic information about the null-state of arguments and return values.
这就是您看到 PropertyChangedEventHandler?
的原因 INotifyPropertyChanged
;它已更新为包含所述注释。
不过,IValueConverterInterface
的最新版本是 Windows Desktop 5。从该页面,您可以看到它尚未更新以利用可空引用类型。