Condividi tramite


Classe ExpansionFunction

Fornisce supporto per le funzioni di espansione in frammenti di codice per un servizio di linguaggio.

Questa API non è conforme a CLS. 

Gerarchia di ereditarietà

System.Object
  Microsoft.VisualStudio.Package.ExpansionFunction

Spazio dei nomi:  Microsoft.VisualStudio.Package
Assembly:   Microsoft.VisualStudio.Package.LanguageService.9.0 (in Microsoft.VisualStudio.Package.LanguageService.9.0.dll)
  Microsoft.VisualStudio.Package.LanguageService.11.0 (in Microsoft.VisualStudio.Package.LanguageService.11.0.dll)
  Microsoft.VisualStudio.Package.LanguageService (in Microsoft.VisualStudio.Package.LanguageService.dll)
  Microsoft.VisualStudio.Package.LanguageService.10.0 (in Microsoft.VisualStudio.Package.LanguageService.10.0.dll)

Sintassi

'Dichiarazione
<ComVisibleAttribute(True)> _
<CLSCompliantAttribute(False)> _
Public MustInherit Class ExpansionFunction _
    Implements IVsExpansionFunction
[ComVisibleAttribute(true)]
[CLSCompliantAttribute(false)]
public abstract class ExpansionFunction : IVsExpansionFunction

Il tipo ExpansionFunction espone i seguenti membri.

Costruttori

  Nome Descrizione
Metodo pubblico ExpansionFunction Inizializza una nuova istanza di ExpansionFunction classe.

In alto

Proprietà

  Nome Descrizione
Proprietà pubblica Arguments Ottiene o imposta gli argomenti della funzione.
Proprietà pubblica ExpansionProvider Ottiene il provider di espansione proprietario della funzione di espansione.
Proprietà pubblica FieldName Ottiene o imposta il nome del campo con cui questa funzione di espansione è associata.

In alto

Metodi

  Nome Descrizione
Metodo pubblico Equals Determina se l'oggetto specificato equivale all'oggetto corrente. (Ereditato da Object)
Metodo pubblico FieldChanged Chiamato quando un campo è stato modificato il valore.
Metodo protetto Finalize Consente a un oggetto di provare a liberare risorse ed eseguire altre operazioni di pulitura prima che l'oggetto stesso venga recuperato dalla procedura di Garbage Collection. (Ereditato da Object)
Metodo pubblico GetArgument Ottiene l'oggetto specificato.
Metodo pubblico GetCurrentValue() Ottiene il valore corrente della funzione di espansione come stringa.
Metodo pubblico GetCurrentValue(String%, Int32%) Ottiene il valore corrente della funzione di espansione.
Metodo pubblico GetDefaultValue() Ottiene il valore predefinito della funzione di espansione.
Metodo pubblico GetDefaultValue(String%, Int32%) Ottiene il valore predefinito della funzione di espansione.
Metodo pubblico GetFieldValue Ottiene il valore del campo specificato.
Metodo pubblico GetFunctionType Ottiene il tipo di funzione, ovvero il tipo di valore la funzione restituisce.
Metodo pubblico GetHashCode Funge da funzione hash per un determinato tipo. (Ereditato da Object)
Metodo pubblico GetIntellisenseList ottiene un elenco di tutti i valori che la funzione di espansione può restituire.
Metodo pubblico GetListCount Ottiene il numero di elementi nell'elenco di valori per la funzione di espansione.
Metodo pubblico GetListText Ottiene il valore dell'elemento dell'elenco specificato.
Metodo pubblico GetSelection Ottiene l'ampiezza del testo selezionato nella visualizzazione corrente.
Metodo pubblico GetType Ottiene l'oggetto Type dell'istanza corrente. (Ereditato da Object)
Metodo protetto MemberwiseClone Consente di creare una copia dei riferimenti dell'oggetto Object corrente. (Ereditato da Object)
Metodo pubblico ReleaseFunction Sblocca tutte le allocazioni ExpansionFunction la classe può eseguire.
Metodo pubblico ToString Restituisce una stringa che rappresenta l'oggetto corrente. (Ereditato da Object)

In alto

Note

Una funzione di espansione è associata a un campo nel modello del frammento di codice per fornire un valore o i valori per il campo quando viene inserito il frammento.vedere Elemento Function (frammenti di codice IntelliSense) per informazioni dettagliate su come una funzione di espansione è dichiarata.

Ogni volta che il valore di un campo deve essere visualizzato, la funzione di espansione “viene eseguita„, ovvero, i metodi e ExpansionFunction oggetto che rappresenta la funzione di espansione viene chiamato per restituire il valore appropriato.

Note per gli implementatori

Se supportate le funzioni di espansione in frammenti di codice per il servizio di linguaggio, è necessario derivare una classe da ExpansionFunction classificare e distribuire GetCurrentValue metodo.Se si desidera supportare più valori per un campo, è necessario eseguire l'override GetIntellisenseList metodo restituisca un elenco di valori.Infine, è necessario eseguire l'override CreateExpansionFunction metodo in LanguageService classificare e restituire un'istanza della versione di ExpansionFunction classe.Si noti che il nome della funzione di espansione viene passato a CreateExpansionFunction metodo, che crea un'istanza di una delle diverse versioni di ExpansionFunction classe, una per ogni funzione di espansione.

Nota di avvisoAttenzione

Una funzione di espansione che accetta argomenti e le necessità accedere ad altri campi non deve essere associata a un campo modificabile come il provider di espansione non è completamente essere inizializzato prima che la funzione di espansione venga chiamato.Pertanto, la funzione di espansione non può ottenere il valore dei relativi argomenti o qualsiasi altro campo.

Un valore predefinito appropriato per il campo che contiene la funzione di espansione valore specificato deve sempre come che il valore predefinito verrà sempre visualizzato quando il frammento di codice viene inserito.

Note per i chiamanti

Questo metodo viene creato in CreateExpansionFunction metodo di LanguageService classe.GetExpansionFunction il metodo viene chiamato da ExpansionProvider in di CreateExpansionFunction classe che a sua volta che viene chiamato da Visual Studio quando un frammento di codice è stato inserito e i campi vengono compilandi.Un frammento di codice è stato inserito da una chiamata a DisplayExpansionBrowser , ExpansionProvider , o di InsertSpecificExpansionmetodi in di InsertNamedExpansionclasse.

Esempi

In questo esempio viene illustrato un file frammento di codice e le implementazioni associata delle funzioni di espansione.Il frammento di codice sono disponibili due funzioni di espansione, una per visualizzare un elenco di opzioni e la seconda per aggiornare un campo non modificabile in base al valore dell'argomento (quale, in questo caso, è il valore di un campo modificabile).

Il file modello del frammento di codice (in questo caso, denominato class.xml).Si noti <funzione> tag che definiscono le funzioni di espansione.

<?xml version="1.0" encoding="utf-8" ?>
<CodeSnippets  xmlns="https://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
    <CodeSnippet Format="1.0.0">
        <Header>
            <Title>class</Title>
            <Shortcut>class</Shortcut>
            <Description>Code snippet for class</Description>
            <Author>Microsoft Corporation</Author>
            <SnippetTypes>
                <SnippetType>Expansion</SnippetType>
                <SnippetType>SurroundsWith</SnippetType>
            </SnippetTypes>
        </Header>
        <Snippet>
            <Declarations>
                <Literal Editable="false">
                    <ID>ConstructorName</ID>
                    <Function>GetClassName($ClassName$)</Function>
                    <Default>MyClass</Default>
                </Literal>
                <Literal>
                    <ID>ClassName</ID>
                    <ToolTip>Class name</ToolTip>
                    <Default>MyClass</Default>
                </Literal>
                <Literal>
                    <ID>access</ID>
                    <ToolTip>public, internal, private or protected</ToolTip>
                    <Function>EnumAccessType()</Function>
                    <Default>public</Default>
                </Literal>
            </Declarations>
            <Code Language="mylanguage"><![CDATA[$access$ class $ClassName$
    {
        public $ConstructorName$() {
            $selected$$end$
        }
    }]]>
            </Code>
        </Snippet>
    </CodeSnippet>
</CodeSnippets>

Ciò è l'implementazione delle funzioni di espansione e come viene creata un'istanza del servizio di linguaggio.

using Microsoft.VisualStudio.Package;

namespace MyLanguagePackage
{
    //==============================================================
    // The Expansion functions.

    //--------------------------------------------------------------
    // This expansion function returns the value of its argument.
    internal class MyGetClassNameExpansionFunction : ExpansionFunction
    {
        public MyGetClassNameExpansionFunction(ExpansionProvider provider)
            : base(provider)
        {
        }

        public override string GetCurrentValue()
        {
            string argValue = null;
            if (this.ExpansionProvider != null)
            {
                // The expansion session may not be initialized yet
                // so do not try to get any arguments if the session is
                // is null. In this case, the default value for the
                // associated field should be the same as the field
                // passed as the argument.
                if (this.ExpansionProvider.ExpansionSession != null)
                {
                    argValue = this.GetArgument(0);
                }
            }
            return argValue;
        }
    }


    //--------------------------------------------------------------
    // This expansion function returns a list of options.
    internal class MyEnumAccessTypeExpansionFunction : ExpansionFunction
    {
        string[] nameList = null;

        public MyEnumAccessTypeExpansionFunction(ExpansionProvider provider)
            : base(provider)
        {
        }

        public override string[] GetIntellisenseList()
        {
            if (nameList == null)
            {
                nameList = new string[] {
                    "public",
                    "protected",
                    "private",
                    "internal",
                };
            }
            return nameList;
        }

        public override string GetCurrentValue()
        {
            // Enumerations do not need to return a value.
            return null;
        }
    }


    //==============================================================
    // The language service, showing how the expansion functions are
    // instantiated.

    //--------------------------------------------------------------
    public class MyLanguageService : LanguageService
    {
        public override ExpansionFunction CreateExpansionFunction(ExpansionProvider provider,
                                                                  string functionName)
        {
            ExpansionFunction function = null;
            if (String.Compare(functionName, "GetClassName", true) == 0)
            {
                function = new MyGetClassNameExpansionFunction(provider);
            }
            else if (String.Compare(functionName, "EnumAccessType", true) == 0)
            {
                function = new MyEnumAccessTypeExpansionFunction(provider);
            }
            return function;
        }
    }
}

Codice thread safe

Qualsiasi membro static (Shared in Visual Basic) pubblico di questo tipo è thread-safe. I membri di istanza non sono garantiti come thread-safe.

Vedere anche

Riferimenti

Spazio dei nomi Microsoft.VisualStudio.Package