x:FactoryMethod 指令
指定一个方法,而不是构造函数,XAML 处理器在解析对象的支持类型后应使用该方法初始化对象。
XAML 属性用法,无 x:Arguments
<object x:FactoryMethod="methodname"...>
...
</object>
XAML 属性用法,x:Arguments 作为元素
<object x:FactoryMethod="methodname"...>
<x:Arguments>
oneOrMoreObjectElements
</x:Arguments>
</object>
XAML 值
值 | 说明 |
---|---|
methodname |
XAML 处理器调用来初始化指定为 object 的实例的方法的字符串方法名称。 请参阅“备注”。 |
oneOrMoreObjectElements |
指定工厂方法参数的对象的一个或多个对象元素。 顺序很重要,它表示应将参数传递给工厂方法的顺序。 |
备注
如果 methodname
是一个实例方法,则无法限定它。
支持将静态方法作为工厂方法。 如果 methodname
是一个静态方法,则 methodname
作为 typeName.methodName
组合提供,其中 typeName
命名定义静态工厂方法的类。 如果引用映射的 xmlns 中的类型,typeName
可以是前缀限定的。 typeName
可以是与 typeof(object)
不同的类型。
工厂方法必须是支持相关对象元素的类型的声明的公共方法。
工厂方法必须返回一个可分配给相关对象的实例。 工厂方法不应返回 null。
x:Arguments
根据与工厂方法签名的最佳匹配原则进行操作。 匹配首先计算参数计数。 如果参数计数有多个可能的匹配项,则计算参数类型并确定最佳匹配。 如果在此计算阶段之后仍存在歧义,则 XAML 处理器的行为是未定义的。
x:FactoryMethod
元素用法不是典型意义上的属性元素用法,因为指令标记不引用包含的对象元素的类型。 预计元素用法不像属性用法那么常见。 x:Arguments
(属性或元素用法)可以与 x:FactoryMethod
元素用法一起使用,但在“用法”部分中没有特别说明这一点。
x:FactoryMethod
作为元素必须位于任何其他属性元素之前,必须位于任何作为元素提供的 x:Arguments
之前,并且必须位于任何内容/内部文本/初始化文本之前。