This post has been republished via RSS; it originally appeared at: Microsoft Developer Blogs - Feed.
If you use an unqualified name in a Windows Runtime IDL file, it is looked up in the current namespace. If you need a name from another namespace, you need to provide its full name.
namespace Contoso.Widgets
{
runtimeclass Widget
{
Windows.Foundation.Collections.IVectorView<String> GetNames();
}
}
There is an exception to this rule: If a parameterized type is given without a namespace, then the Windows Runtime IDL compiler will look in the Windows.Foundation.Collections namespace before giving up. In practice, this means that you can use the following shorthand:
| Shorthand | Expands to |
|---|---|
| IIterable<T> | Windows.Foundation.Collections.IIterable<T> |
| IIterator<T> | Windows.Foundation.Collections.IIterator<T> |
| IKeyValuePair<K, V> | Windows.Foundation.Collections.IKeyValuePair<K, V> |
| IMap<K, V> | Windows.Foundation.Collections.IMap<K, V> |
| IMapChangedEventArgs<K> | Windows.Foundation.Collections.IMapChangedEventArgs<K> |
| IMapView<K, V> | Windows.Foundation.Collections.IMapView<K, V> |
| IObservableMap<K, V> | Windows.Foundation.Collections.IObservableMap<K, V> |
| IObservableVector<T> | Windows.Foundation.Collections.IObservableVector<T> |
| IVector<T> | Windows.Foundation.Collections.IVector<T> |
| IVectorView<T> | Windows.Foundation.Collections.IVectorView<T> |
| MapChangedEventHandler<K, V> | Windows.Foundation.Collections.MapChangedEventHandler<K, V> |
| VectorChangedEventHandler<T> | Windows.Foundation.Collections.VectorChangedEventHandler<T> |
Resulting in
namespace Contoso.Widgets
{
runtimeclass Widget
{
IVectorView<String> GetNames();
}
}
Unfortunately, this courtesy does not apply to the Windows.Foundation namespace. You still have to write the full name Windows.Foundation.IAsyncAction, for example.
Bonus chatter: Why does the shorthand work for Windows.Foundation.Collections but not Windows.Foundation? Simple: When the compiler was being written, nobody asked for a shorthand for the Windows.Foundation namespace.
