Udostępnij za pośrednictwem


Klasa ExpansionFunction

Zapewnia obsługę funkcji rozszerzeń w wstawki kodu programu obsługi języka.

Ten interfejs API nie jest zgodny ze specyfikacją CLS. 

Hierarchia dziedziczenia

System.Object
  Microsoft.VisualStudio.Package.ExpansionFunction

Przestrzeń nazw:  Microsoft.VisualStudio.Package
Zestawy:   Microsoft.VisualStudio.Package.LanguageService.9.0 (w Microsoft.VisualStudio.Package.LanguageService.9.0.dll)
  Microsoft.VisualStudio.Package.LanguageService.11.0 (w Microsoft.VisualStudio.Package.LanguageService.11.0.dll)
  Microsoft.VisualStudio.Package.LanguageService (w Microsoft.VisualStudio.Package.LanguageService.dll)
  Microsoft.VisualStudio.Package.LanguageService.10.0 (w Microsoft.VisualStudio.Package.LanguageService.10.0.dll)

Składnia

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

Typ ExpansionFunction uwidacznia następujące elementy członkowskie.

Konstruktorzy

  Nazwa Opis
Metoda publiczna ExpansionFunction Inicjuje nowe wystąpienie ExpansionFunction klasy.

Początek

Właściwości

  Nazwa Opis
Właściwość publiczna Arguments Pobiera lub ustawia argumenty funkcji.
Właściwość publiczna ExpansionProvider Pobiera dostawcy rozszerzenia, która jest właścicielem tej funkcji rozszerzeń.
Właściwość publiczna FieldName Pobiera lub ustawia nazwę pola, z którym jest skojarzona ta funkcja rozszerzenia.

Początek

Metody

  Nazwa Opis
Metoda publiczna Equals Określa, czy określony obiekt jest równa bieżącego obiektu. (Odziedziczone z Object).
Metoda publiczna FieldChanged Wywoływane, gdy pole zostało zmienione jej wartość.
Metoda chroniona Finalize Umożliwia obiekt spróbuj zwolnić zasoby i wykonywania innych operacji oczyszczania, zanim jest odzyskane w procesie wyrzucania elementów bezużytecznych. (Odziedziczone z Object).
Metoda publiczna GetArgument Pobiera określony argument.
Metoda publiczna GetCurrentValue() Pobiera bieżącą wartość funkcji rozszerzenia jako ciąg znaków.
Metoda publiczna GetCurrentValue(String%, Int32%) Pobiera bieżącą wartość funkcji rozszerzenia.
Metoda publiczna GetDefaultValue() Pobiera wartości domyślne funkcji rozszerzenia.
Metoda publiczna GetDefaultValue(String%, Int32%) Pobiera wartości domyślne funkcji rozszerzenia.
Metoda publiczna GetFieldValue Zwraca wartość określonego pola.
Metoda publiczna GetFunctionType Pobiera typ funkcji; oznacza to wpisz wartości, które funkcja zwraca.
Metoda publiczna GetHashCode Służy jako funkcja mieszania dla określonego typu. (Odziedziczone z Object).
Metoda publiczna GetIntellisenseList Pobiera listę wszystkich wartości, które można zwrócić funkcja rozszerzenia.
Metoda publiczna GetListCount Pobiera liczbę elementów na liście wartości dla funkcji rozszerzenia.
Metoda publiczna GetListText Pobiera wartość wybranej pozycji listy.
Metoda publiczna GetSelection Pobiera zakres zaznaczony tekst w bieżącym widoku.
Metoda publiczna GetType Pobiera Type bieżącej instancji. (Odziedziczone z Object).
Metoda chroniona MemberwiseClone Tworzy kopię płytkie bieżące Object. (Odziedziczone z Object).
Metoda publiczna ReleaseFunction Alokacje zwalnia użytkownika ExpansionFunction klasy mogły zostać wprowadzone.
Metoda publiczna ToString Zwraca ciąg, który reprezentuje bieżącego obiektu. (Odziedziczone z Object).

Początek

Uwagi

Funkcja rozszerzenia jest skojarzone z polem w szablonie urywek kodu w celu zapewnienia wartość lub wartości dla tego pola w czasie, gdy urywek jest wstawiany.Zobacz Funkcja elementu (urywki kodu IntelliSense) szczegółowe informacje na temat sposobu zadeklarowano funkcję rozszerzenia.

W każdym przypadku, gdy wartość pola musi być wyświetlane, funkcja rozszerzenia "uruchomiono", oznacza to, że metody na ExpansionFunction obiekt, który reprezentuje funkcji rozszerzenia są nazywane do zwrócenia odpowiedniej wartości.

Uwagi dotyczące implementacji

Jeżeli rozszerzenia funkcji w wstawki kodu programu jest wspieranie usługi języka, musi pochodzić z klasy z ExpansionFunction klasy i wprowadzenia w życie GetCurrentValue metody.Jeśli chcesz obsługiwać wiele wartości dla pola, a następnie należy zastąpić GetIntellisenseList metodę, aby powrócić do listy wartości.Wreszcie, należy zastąpić CreateExpansionFunction metodę w LanguageService klasy i zwrócić wystąpienia danej wersji ExpansionFunction klasy.Należy zauważyć, że nazwa funkcji rozszerzenia jest przekazywana do CreateExpansionFunction metoda pozwala utworzyć wystąpienia jednej z kilku różnych wersji programu ExpansionFunction klasy, jeden dla każdej funkcji rozszerzenia.

Informacje dotyczące przestrogiPrzestroga

Funkcja rozszerzenia, która przyjmuje argumenty, lub musi mieć dostęp do innych pól nie powinna być związana z edytowalne pole jako dostawca rozszerzeń nie może być całkowicie zainicjowana przez czas, zostanie wywołana funkcja rozszerzenia.W wyniku funkcji rozszerzenia nie jest w stanie uzyskać wartość jej argumentów lub jakiegokolwiek innego pola.

Wartość domyślną odpowiedniego dla pola zawierającego funkcji rozszerzenia powinny być zawsze określona jako że wartość domyślna jest zawsze wyświetlany po pierwsze dodaje się wstawki kodu programu.

Uwagi dotyczące wywoływania

Metoda ta jest tworzona w CreateExpansionFunction metoda LanguageService klasy.CreateExpansionFunction z wywoływana jest metoda GetExpansionFunction w ExpansionProvider klasy, która z kolei jest wywoływana przez Visual Studio, gdy dodaje się wstawki kodu programu i pola są wypełniane.Wstawki kodu programu jest wstawiane przez wywołanie do InsertNamedExpansion, InsertSpecificExpansion, lub DisplayExpansionBrowser metod w ExpansionProvider klasy.

Przykłady

Ten przykład pokazuje pliku urywka kodu i skojarzone implementacji funkcji rozszerzeń.Wstawki kodu programu dostępne są dwie funkcje rozszerzeń, jeden dla pokazywania listy opcji i drugi dla aktualizacji w polu niepodlegającym edycji na podstawie wartości argumentu (który jest w tym przypadku wartość edytowalne pole).

Plik szablonu urywek kodu (w tym sprawa o nazwie class.xml).Uwaga <Function> Definiowanie funkcji rozszerzeń znaczniki.

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

Jest to realizacji funkcji rozszerzeń i jak są tworzone z usługi języka.

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

Bezpieczeństwo wątku

Wszystkie publiczne static (Shared w języku Visual Basic) elementy członkowskie tego typu są bezpieczne dla wątków. Wystąpienia elementów członkowskich nie dają gwarancji bezpieczeństwa wątków.

Zobacz też

Informacje

Przestrzeń nazw Microsoft.VisualStudio.Package