c# - 为什么 MarkupExtension 是 wpf 中的类

标签 c# wpf xaml markup-extensions

<分区>

MarkupExtension 类的反编译如下所示:

[TypeForwardedFrom("WindowsBase, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35")]
public abstract class MarkupExtension
{
    [TargetedPatchingOptOut("Performance critical to inline this type of method across NGen image boundaries")]
    protected MarkupExtension()
    {
    }

    public abstract object ProvideValue(IServiceProvider serviceProvider);
}

如您所见,它本可以实现为一个接口(interface),但它是一个类。 为什么 WPF 团队要这样设计? 此外,in Silverlight it is an interface .

最佳答案

在 .NET 中,您拥有 NGEN( native 生成器),它允许您将 IL 代码编译为适用于运行应用程序的特定机器的机器代码。 (您不能使用此工具将您的 IL 代码编译为适用于所有计算机的机器代码,此工具依赖于 CPU、操作系统和...)。您的应用程序的性能将因为此工具而大幅提升。

WPF(.NET)版本代码中使用的属性[TargetedPatchingOptOut]是针对NGEN工具的,这里这个属性是在constructor之上使用的,所以接口(interface)不适合这里。

在 Silverlight 中,您没有 NGEN,也没有名为 [TargetedPatchingOptOut] 的属性

祝你好运

关于c# - 为什么 MarkupExtension 是 wpf 中的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18871065/

相关文章:

c# - 从 C# KeyValuePair 中选择值

c# - WPF 数据网格样式错误 IDataErrorInfo

c# - Wpf 文本选取框位于其他元素后面

c# - WPF:MVVM 中的命令和 ViewModel 关系

c# - Style Setter 中的绑定(bind)值不起作用

c# - 布局类似于 Windows 8 中的天气应用程序

c# - DateTime.AddMilliSeconds 似乎不起作用

c# - 在 Nhibernate 中执行简单的过程调用

c# - 方法的最大参数数量是多少(WebApi?)

wpf - 使用 xaml 在二次贝塞尔曲线段上绘制箭头端