从UWP中的IconElement派生

时间:2016-01-26 23:32:24

标签: c# uwp

我正在尝试将FontAwesome带到UWP并找到SymbolIcon - Class,它为内置的Segoe UI Symbol字体执行此操作。

该类继承自IconElement并且看起来很有前途,但我不能从该类派生,因为VS告诉我“IconElement不接受带有0个参数的构造函数”。

问题:我不知道我应该实施什么,VS或Resharper都没有给我任何见解。即使是SymbolIcon的反编译也没有启发我。

我想念什么?

VS

编辑:

base()只是一个测试,看看IconElements构造函数是否有任何参数。

但我仍然不明白为什么我不能简单地从IconElement派生 - 它的工作没有来自FrameworkElement的任何问题:

Larger Example

2 个答案:

答案 0 :(得分:1)

我认为:

public foo() : base()
{

}

不被接受,因为只有类IconElement没有显式构造函数,所以调用: base()只是多余的,因为Resharper提示:

enter image description here

为何多余?因为你甚至无法继承那个' IconElement'上课,为什么?因为:

  

如果类不包含实例构造函数声明,则为默认值   实例构造函数是自动提供的。那个默认   构造函数只是调用direct的无参数构造函数   基类。

更新:

所以问题是当编译器去调用直接基类的无参数构造函数时(在这种情况下是' IconElement'),它根本就找不到任何无参数构造函数(IconElement)没有一个,编译器给它一个默认值,它调用它的父对象,FrameworkElement,因此它生成CS1729 Error

答案 1 :(得分:1)

IconElement没有任何public(或protected)构造函数。派生类需要调用基础构造函数,因此无法创建派生类。其他hans上的FrameworkElement有一个默认的无参数protected构造函数,您可以从派生类调用它,因此您可以创建派生类。

要使SymbolIcon类能够从IconElement类派生,它仍然需要IconElement类中的可访问构造函数。显然,internal类中有一个可以访问的IconElement构造函数,因为它位于同一个程序集中。

您可以自己重新创建相同的方案。创建一个只有一个无参数构造函数的类internal

public class BaseClass()
{
    internal BaseClass() { }
}

您现在可以在同一个程序集中创建派生类(它可以调用此内部构造函数),但是您将无法从引用此程序集的另一个程序集中执行此操作(在该程序集上将不会有可访问的构造函数)基类)。

我不确定你为什么要从IconElement类派生出来,但是你无法做到。即使它实现的IIconElement接口也是内部接口,因此您也无法自己实现它。

此外,所有这些类都是本机实现的,因此您无法真正反编译它们。在*.winmd文件中只有可用的托管元数据,如果您尝试在例如ReSharper的。