【发布时间】:2012-03-06 08:15:43
【问题描述】:
我正在尝试创建一个用于 Metro 风格应用程序 (win8) 的 C# WinRT 组件,但在投影类型方面遇到了问题。
IVector 和 IMap 数据类型似乎因其保护级别而无法访问?
我的示例 WinMD 库有一个类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Windows.Foundation.Collections;
namespace ClassLibrary1
{
public sealed class Class1
{
public IVector<string> foo()
{
return new List<string>();
}
}
}
我收到以下编译器错误:
Inconsistent accessibility: return type 'Windows.Foundation.Collections.IVector<string>' is less accessible than method 'ClassLibrary1.Class1.foo()'
'Windows.Foundation.Collections.IVector<string>' is inaccessible due to its protection level
我做错了什么?
编辑:
啊哈!
原来我不应该直接使用 WinRT 类型名称,而是使用它们翻译的 .NET 名称。
正确的代码如下所示:
namespace ClassLibrary1
{
public sealed class Class1
{
public IList<string> foo()
{
return new List<string>();
}
}
}
【问题讨论】:
-
这是一个以原生 API 为核心的 WinRT 组件。所以它需要投影 List
-> IVector 。有关详细信息,请参阅msdn.microsoft.com/en-us/library/windows/apps/…。映射表大约在页面的中间位置。
标签: c# winapi windows-8 windows-runtime microsoft-metro