Partager via


ExpansionFunction, classe

Fournit la prise en charge des fonctions d'expansion dans les extraits de code pour un service de langage.

Cette API n'est pas conforme CLS. 

Hiérarchie d'héritage

System.Object
  Microsoft.VisualStudio.Package.ExpansionFunction

Espace de noms :  Microsoft.VisualStudio.Package
Assemblys :   Microsoft.VisualStudio.Package.LanguageService.9.0 (dans Microsoft.VisualStudio.Package.LanguageService.9.0.dll)
  Microsoft.VisualStudio.Package.LanguageService.11.0 (dans Microsoft.VisualStudio.Package.LanguageService.11.0.dll)
  Microsoft.VisualStudio.Package.LanguageService (dans Microsoft.VisualStudio.Package.LanguageService.dll)
  Microsoft.VisualStudio.Package.LanguageService.10.0 (dans Microsoft.VisualStudio.Package.LanguageService.10.0.dll)

Syntaxe

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

Le type ExpansionFunction expose les membres suivants.

Constructeurs

  Nom Description
Méthode publique ExpansionFunction Initialise une nouvelle instance de la classe ExpansionFunction.

Début

Propriétés

  Nom Description
Propriété publique Arguments Obtient ou définit les arguments à la fonction.
Propriété publique ExpansionProvider Obtient le fournisseur d'expansion qui possède cette fonction d'expansion.
Propriété publique FieldName Obtient ou définit le nom du champ auquel cette fonction d'expansion est associée.

Début

Méthodes

  Nom Description
Méthode publique Equals Détermine si l'objet Object spécifié est égal à l'objet Object actuel. (Hérité de Object.)
Méthode publique FieldChanged Appelé lorsqu'un champ a modifié sa valeur.
Méthode protégée Finalize Autorise un objet à tenter de libérer des ressources et d'exécuter d'autres opérations de nettoyage avant qu'il ne soit récupéré par l'opération garbage collection. (Hérité de Object.)
Méthode publique GetArgument Obtient l'argument spécifié.
Méthode publique GetCurrentValue() Obtient la valeur actuelle de la fonction d'expansion en tant que chaîne.
Méthode publique GetCurrentValue(String%, Int32%) Obtient la valeur actuelle de la fonction d'expansion.
Méthode publique GetDefaultValue() Obtient la valeur par défaut de la fonction d'expansion.
Méthode publique GetDefaultValue(String%, Int32%) Obtient la valeur par défaut de la fonction d'expansion.
Méthode publique GetFieldValue Obtient la valeur du champ spécifié.
Méthode publique GetFunctionType Obtient le type de la fonction ; autrement dit, le type de valeur la fonction retourne.
Méthode publique GetHashCode Sert de fonction de hachage pour un type particulier. (Hérité de Object.)
Méthode publique GetIntellisenseList Obtient une liste de toutes les valeurs que que la fonction d'expansion peut se retourner.
Méthode publique GetListCount Obtient le nombre d'éléments dans la liste de valeurs pour la fonction d'expansion.
Méthode publique GetListText Obtient la valeur de l'élément de liste spécifié.
Méthode publique GetSelection Obtient l'étendue de texte sélectionné dans l'affichage en cours.
Méthode publique GetType Obtient le Type de l'instance actuelle. (Hérité de Object.)
Méthode protégée MemberwiseClone Crée une copie superficielle de l'objet Object actuel. (Hérité de Object.)
Méthode publique ReleaseFunction Libère toutes les allocations que que votre classe d'ExpansionFunction pourrait avoir faites.
Méthode publique ToString Retourne une chaîne qui représente l'objet actuel. (Hérité de Object.)

Début

Remarques

Une fonction d'expansion est associée à un champ dans un modèle d'extrait de code afin de fournir une valeur ou des valeurs pour ce champ lorsque l'extrait de code est inséré.Consultez Function, élément (extraits de code IntelliSense) pour savoir comment une fonction d'expansion est déclarée.

Chaque fois que la valeur d'un champ doit être affichée, la fonction d'expansion « est exécutée, c ». autrement dit., les méthodes sur l'objet d'ExpansionFunction qui représente la fonction d'expansion sont appelées pour retourner la valeur appropriée.

Remarques à l'attention des implémenteurs

Si vous prenez en charge des fonctions d'expansion dans les extraits de code pour votre service de langage, vous devez dériver une classe de la classe d'ExpansionFunction et appliquer la méthode d'GetCurrentValue.Si vous souhaitez prendre en charge de plusieurs valeurs pour un champ, vous devez substituer la méthode d'GetIntellisenseList pour retourner une liste de valeurs.Enfin, vous devez substituer la méthode d'CreateExpansionFunction dans la classe d'LanguageService et retourner une instance de votre version de la classe d'ExpansionFunction.Notez que le nom de la fonction d'expansion est passé à la méthode d'CreateExpansionFunction, vous permettant pour instancier une de différentes versions de votre classe d'ExpansionFunction, un pour chaque fonction d'expansion.

Mise en gardeAttention

Une fonction d'expansion qui prend des arguments ou des besoins d'accéder à d'autres champs ne doit pas être associée à un champ modifiable comme le fournisseur d'expansion ne peut pas être entièrement initialisé avant que la fonction d'expansion soit appelée.Par conséquent, la fonction d'expansion ne peut pas obtenir la valeur de ses arguments ou un autre champ.

Une valeur par défaut appropriée pour le champ contenant la fonction d'expansion doit toujours être spécifiée comme que la valeur par défaut est toujours affichée lorsque l'extrait de code est inséré premier.

Remarques à l'attention des appelants

Cette méthode est créée dans la méthode d'CreateExpansionFunction de classe d'LanguageService.La méthode d'CreateExpansionFunction est appelée de l'GetExpansionFunction dans la classe d'ExpansionProvider qui ensuite est appelée par Visual Studio lorsqu'un extrait de code a été inséré et les champs sont remplis.Un extrait de code est inséré par un appel à l'InsertNamedExpansion, à l'InsertSpecificExpansion, ou aux méthodes d'DisplayExpansionBrowser dans la classe d'ExpansionProvider.

Exemples

Cet exemple montre un fichier d'extrait de code et les implémentations associées de l'expansion fonctionne.L'extrait de code a deux fonctions de développement, une pour montrer une liste d'options, et la seconde pour mettre à jour un champ non- modifiable selon la valeur de son argument (ce qui, dans ce cas, est la valeur d'un champ modifiable).

Le fichier modèle d'extrait de code (dans ce cas, class.xml appelé).Notez les balises de <Function> définissant les fonctions d'expansion.

<?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>

C'est l'implémentation des fonctions d'expansion et comment elles sont instanciées du service de langage.

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;
        }
    }
}

Sécurité des threads

Tous les membres static (Shared en Visual Basic) publics de ce type sont thread-safe. Il n'est pas garanti que les membres d'instance soient thread-safe.

Voir aussi

Référence

Microsoft.VisualStudio.Package, espace de noms