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 | |
---|---|---|
ExpansionFunction | Initialise une nouvelle instance de la classe ExpansionFunction. |
Début
Propriétés
Nom | Description | |
---|---|---|
Arguments | Obtient ou définit les arguments à la fonction. | |
ExpansionProvider | Obtient le fournisseur d'expansion qui possède cette fonction d'expansion. | |
FieldName | Obtient ou définit le nom du champ auquel cette fonction d'expansion est associée. |
Début
Méthodes
Nom | Description | |
---|---|---|
Equals | Détermine si l'objet Object spécifié est égal à l'objet Object actuel. (Hérité de Object.) | |
FieldChanged | Appelé lorsqu'un champ a modifié sa valeur. | |
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.) | |
GetArgument | Obtient l'argument spécifié. | |
GetCurrentValue() | Obtient la valeur actuelle de la fonction d'expansion en tant que chaîne. | |
GetCurrentValue(String%, Int32%) | Obtient la valeur actuelle de la fonction d'expansion. | |
GetDefaultValue() | Obtient la valeur par défaut de la fonction d'expansion. | |
GetDefaultValue(String%, Int32%) | Obtient la valeur par défaut de la fonction d'expansion. | |
GetFieldValue | Obtient la valeur du champ spécifié. | |
GetFunctionType | Obtient le type de la fonction ; autrement dit, le type de valeur la fonction retourne. | |
GetHashCode | Sert de fonction de hachage pour un type particulier. (Hérité de Object.) | |
GetIntellisenseList | Obtient une liste de toutes les valeurs que que la fonction d'expansion peut se retourner. | |
GetListCount | Obtient le nombre d'éléments dans la liste de valeurs pour la fonction d'expansion. | |
GetListText | Obtient la valeur de l'élément de liste spécifié. | |
GetSelection | Obtient l'étendue de texte sélectionné dans l'affichage en cours. | |
GetType | Obtient le Type de l'instance actuelle. (Hérité de Object.) | |
MemberwiseClone | Crée une copie superficielle de l'objet Object actuel. (Hérité de Object.) | |
ReleaseFunction | Libère toutes les allocations que que votre classe d'ExpansionFunction pourrait avoir faites. | |
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.
Attention |
---|
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.