C#/WinRT 中 WinRT 类型的 .NET 映射

本文列出了 C#/WinRT 在面向 .NET 5(或更高版本)的桌面应用中的 Windows 运行时 (WinRT) 类型和 .NET 类型之间产生的映射。 在这些应用中,Visual Studio IntelliSense 显示 .NET 类型而不是 Windows 运行时类型。 例如,如果 Windows 运行时方法采用类型 IVectorstring> 的参数,IntelliSense 将显示类型 IList<string> 的参数。 同样,在使用 C#/WinRT 编写的 WinRT 组件中,会在成员签名中使用 .NET 类型。 使用 C#/WinRT 生成 Windows 运行时组件时,.NET 类型将转换为相应的 WinRT 类型。

C#/WinRT 自定义类型映射按 Windows SDK 或 WinUI 3(WinUI 3 是 Windows App SDK 的一部分)中的类型进行分类。 Windows SDK 映射的 WinRT 类型位于 Windows.* 命名空间下,WinUI 3 映射的 WinRT 类型位于 Microsoft.UI.Xaml.* 命名空间下。 C#/WinRT 为 WinRT 类型创建自定义类型映射的原因有两个:

  • 映射到具有不同名称和/或命名空间的 .NET 类型的 WinRT 类型。 这些自定义映射用于将 WinRT 类型映射到现有的 .NET 等效类型。 也有映射到不同类型的情况(例如,值类型映射到类类型)。

  • 映射到具有相同名称和命名空间的 .NET 类型的 WinRT 类型。 这些自定义映射通常用于性能或增强的原因,直接在 C# 中实现。 在 WinRT 和 .NET 中,大多数具有相同的命名空间名称和类型名称的类型都是结构(或者与结构关联的类型,例如枚举)。 在 WinRT 中,结构没有字段以外的成员,并且需要帮助器类型(.NET 会隐藏这些类型)。 这些 .NET 版本的结构具有可提供隐藏帮助程序类型的功能的属性和方法(例如 Windows.UI.Color)。

注意

有关 UWP 应用上下文中 WinRT 和 .NET 类型之间的映射列表,请参阅 UWP 中 WinRT 类型的 .NET 映射

Windows SDK 中 WinRT 类型的映射

具有不同名称和/或命名空间的类型

WinRT 类型/命名空间 .NET 类型/命名空间
DateTime (Windows.Foundation) DateTimeOffset (System)
EventHandler<T> (Windows.Foundation) EventHandler<T> (System)
EventRegistrationToken (Windows.Foundation) EventRegistrationToken (WinRT)
HResult (Windows.Foundation) Exception (System)
IClosable (Windows.Foundation) IDisposable (System)
IReference<T> (Windows.Foundation) Nullable<T> (System)
TimeSpan (Windows.Foundation) TimeSpan (System)
Uri (Windows.Foundation) Uri (System)
IIterable<T> (Windows.Foundation.Collections) IEnumerable<T> (System.Collections.Generic)
IIterator<T> (Windows.Foundation.Collections) IEnumerator<T> (System.Collections.Generic)
IMap<K,V> (Windows.Foundation.Collections) IDictionary<TKey,TValue> (System.Collections.Generic)
IMapView<K,V> (Windows.Foundation.Collections) IReadOnlyDictionary<TKey,TValue> (System.Collections.Generic)
IKeyValuePair<K,V> (Windows.Foundation.Collections) KeyValuePair<TKey,TValue> (System.Collections.Generic)
IVector<T> (Windows.Foundation.Collections) IList<T> (System.Collections.Generic)
IVectorView<T> (Windows.Foundation.Collections) IReadOnlyList<T> (System.Collections.Generic)
AttributeTargets (Windows.Foundation.Metadata) AttributeTargets (System)
AttributeUsageAttribute (Windows.Foundation.Metadata) AttributeUsageAttribute (System)
Matrix3x2 (Windows.Foundation.Numerics) Matrix3x2 (System.Numerics)
Matrix4x4 (Windows.Foundation.Numerics) Matrix4x4 (System.Numerics)
Plane (Windows.Foundation.Numerics) Plane (System.Numerics)
Quaternion (Windows.Foundation.Numerics) Quaternion (System.Numerics)
Vector2 (Windows.Foundation.Numerics) Vector2 (System.Numerics)
Vector3 (Windows.Foundation.Numerics) Vector3 (System.Numerics)
Vector4 (Windows.Foundation.Numerics) Vector4 (System.Numerics)
IBindableIterable (Windows.UI.Xaml.Interop) IEnumerable (System.Collections)
IBindableVector (Windows.UI.Xaml.Interop) IList (System.Collections)
TypeName (Windows.UI.Xaml.Interop) Type (System)

具有相同名称和命名空间的类型

类型 命名空间
IPropertyValue Windows.Foundation
IReferenceArray<T> Windows.Foundation
Windows.Foundation
Rect Windows.Foundation
大小 Windows.Foundation
颜色 Windows.UI
TypeKind Windows.UI.Xaml.Interop

WinUI 中 WinRT 类型的映射

具有不同名称和/或命名空间的类型

WinRT 类型/命名空间 .NET 类型/命名空间
INotifyCollectionChanged (Microsoft.UI.Xaml.Data) INotifyCollectionChanged (System.Collections.Specialized)
NotifyCollectionChangedEventHandler (Microsoft.UI.Xaml.Data) NotifyCollectionChangedEventHandler (System.Collections.Specialized)
NotifyCollectionChangedEventArgs (Microsoft.UI.Xaml.Data) NotifyCollectionChangedEventArgs (System.Collections.Specialized)
NotifyCollectionChangedAction (Microsoft.UI.Xaml.Data) NotifyCollectionChangedAction (System.Collections.Specialized)
DataErrorsChangedEventArgs (Microsoft.UI.Xaml.Data) DataErrorsChangedEventArgs (System.ComponentModel)
INotifyDataErrorInfo (Microsoft.UI.Xaml.Data) INotifyDataErrorInfo (System.ComponentModel)
INotifyPropertyChanged (Microsoft.UI.Xaml.Data) INotifyPropertyChanged (System.ComponentModel)
PropertyChangedEventHandler (Microsoft.UI.Xaml.Data) PropertyChangedEventHandler (System.ComponentModel)
PropertyChangedEventArgs (Microsoft.UI.Xaml.Data) PropertyChangedEventArgs (System.ComponentModel)
ICommand (Microsoft.UI.Xaml.Input) ICommand (System.Windows.Input)
IXamlServiceProvider (Microsoft.UI.Xaml) IServiceProvider (System)

具有相同名称和命名空间的类型

类型 命名空间
CornerRadius Microsoft.UI.Xaml
持续时间 Microsoft.UI.Xaml
DurationType Microsoft.UI.Xaml
GridLength Microsoft.UI.Xaml
GridUnitType Microsoft.UI.Xaml
Thickness Microsoft.UI.Xaml
GeneratorPosition Microsoft.UI.Xaml.Controls.Primitives
Matrix Microsoft.UI.Xaml.Media
KeyTime Microsoft.UI.Xaml.Media.Animation
RepeatBehavior Microsoft.UI.Xaml.Media.Animation
RepeatBehaviorType Microsoft.UI.Xaml.Media.Animation
Matrix3D (Microsoft.UI.Xaml.Media.Media3D