在UWP应用程序中自引用generics类型约束和XAML
我目前正在开发一个UWP应用程序,其中我在PCL中使用自引用generics类型约束 。
这里描述了PCL的类。
首先,实现自引用generics类型约束的类(此类还实现new()
约束)
public abstract class A where T : A, new() { //... }
然后,我有一个扩展Windows.UI.Xaml.Controls.Page
类的基类:
public abstract class MyPage : Page where T : A, new() { //... }
我还有一个扩展Windows.UI.Xaml.Application
类的基类:
public abstract class MyApplication : Application where T : A, new() { //... }
我的UWP课程以下列方式扩展了上述PCL的类…
首先,我有一个扩展A
类的B
类:
public sealed class B : A { //... }
然后,我有扩展MyApplication
类的类App
。 csharp文件:
public sealed partial class App : MyApplication { //... }
和XAML文件:
然后,我有一个扩展类MyPage
的HomePage
。 csharp文件:
public sealed partial class HomePage : MyPage { //... }
和XAML文件:
当我尝试编译时,我有以下错误(消息是法语,我试图用英语翻译它们):
用于generics类型
MyApp
需要类型为1的参数(文件App.i.cs)用于generics类型
MyPage
需要类型为1的参数(文件HomePage.i.cs)名称
MyApp
在名称空间中不存在using:My.PCL
(文件App.xaml)名称
MyPage
在名称空间中不存在using:My.PCL
(文件HomePage.xaml)
根据这些问题,我需要在App
和HomePage
类的XAML中指定genereic类型,所以这里是根据本文的新XAML文件:
和
但它不起作用。 我仍然有以前的错误…和新的错误:
My.PCL.MyApplication'1[T]
上的GenericArguments [0],System.Object
违反了类型T
的约束(文件App.xaml)
My.PCL.MyPage'1[T]
上的GenericArguments [0],System.Object
违反了类型T
的约束(文件HomePage.xaml)
你知道如何解决这个问题吗?
预先感谢您的帮助 !
鉴于此答案(对于Windows 8)和您的结果,我认为我们可以安全地假设Windows 10中仍不支持XAML中的通用参数。
作为解决方法,您可以在inheritance树中添加中间类以设置通用约束:
public abstract class BaseApp : MyApplication { }
然后让你的应用inheritance它:
sealed partial class App : BaseApp
并相应地更改您的XAML:
很脏,但不幸的是,你无能为力。