Condividi tramite


Direttiva x:FactoryMethod

Specifica un metodo diverso da un costruttore che un processore XAML deve usare per inizializzare un oggetto dopo la risoluzione del tipo di supporto.

Utilizzo degli attributi XAML, nessun argomento x:Arguments

<object x:FactoryMethod="methodname"...>  
  ...  
</object>  

Utilizzo attributi XAML, x:Arguments come elementi

<object x:FactoryMethod="methodname"...>  
  <x:Arguments>  
    oneOrMoreObjectElements  
  </x:Arguments>  
</object>  

Valori XAML

Valore Descrizione
methodname Nome del metodo stringa di un metodo chiamato dai processori XAML per inizializzare l'istanza specificata come object. Vedere la sezione Osservazioni.
oneOrMoreObjectElements Uno o più elementi oggetto per gli oggetti che specificano i parametri del metodo factory. L'ordine è significativo; indica l'ordine in cui gli argomenti devono essere passati al metodo factory.

Osservazioni

Se methodname è un metodo di istanza, non può essere qualificato.

I metodi statici come metodi factory sono supportati. Se methodname è un metodo statico, methodname viene fornito come combinazione di typeName.methodName, in cui typeName denomina la classe che definisce il metodo factory statico. typeName può essere qualificato con prefisso se si fa riferimento a un tipo in un xmlns mappato. typeName può essere un tipo diverso da typeof(object).

Il metodo factory deve essere un metodo pubblico dichiarato del tipo che esegue il backup dell'elemento oggetto pertinente.

Il metodo factory deve restituire un'istanza assegnabile all'oggetto pertinente. I metodi factory non devono mai restituire null.

x:Arguments opera su un principio di corrispondenza ottimale per le firme dei metodi factory. La corrispondenza valuta prima il conteggio dei parametri. Se sono presenti più corrispondenze possibili per un conteggio dei parametri, il tipo di parametro viene quindi valutato e viene determinata la corrispondenza migliore. Se dopo questa fase di valutazione c'è ancora ambiguità, il comportamento del processore XAML non è definito.

L'utilizzo dell'elemento x:FactoryMethod non è l'utilizzo degli elementi di proprietà nel senso tipico, perché il markup della direttiva non fa riferimento al tipo dell'elemento oggetto contenitore. È previsto che l'utilizzo degli elementi sia meno comune rispetto all'utilizzo degli attributi. x:Arguments (utilizzo di attributi o elementi) può essere usato insieme all'utilizzo degli elementi x:FactoryMethod, ma questo non è illustrato in modo specifico nelle sezioni Utilizzo.

x:FactoryMethod come elemento deve precedere qualsiasi altro elemento della proprietà, deve precedere qualsiasi x:Arguments fornito anche come elementi e deve precedere qualsiasi contenuto/testo interno/inizializzazione.

Vedere anche