ExpansionFunction 类
提供对在代码段的扩展功能支持的语言服务。
此 API 不兼容 CLS。
继承层次结构
System.Object
Microsoft.VisualStudio.Package.ExpansionFunction
命名空间: Microsoft.VisualStudio.Package
程序集: Microsoft.VisualStudio.Package.LanguageService.9.0(在 Microsoft.VisualStudio.Package.LanguageService.9.0.dll 中)
Microsoft.VisualStudio.Package.LanguageService.11.0(在 Microsoft.VisualStudio.Package.LanguageService.11.0.dll 中)
Microsoft.VisualStudio.Package.LanguageService(在 Microsoft.VisualStudio.Package.LanguageService.dll 中)
Microsoft.VisualStudio.Package.LanguageService.10.0(在 Microsoft.VisualStudio.Package.LanguageService.10.0.dll 中)
语法
声明
<ComVisibleAttribute(True)> _
<CLSCompliantAttribute(False)> _
Public MustInherit Class ExpansionFunction _
Implements IVsExpansionFunction
[ComVisibleAttribute(true)]
[CLSCompliantAttribute(false)]
public abstract class ExpansionFunction : IVsExpansionFunction
ExpansionFunction 类型公开以下成员。
构造函数
名称 | 说明 | |
---|---|---|
ExpansionFunction | 初始化 ExpansionFunction 类的新实例。 |
页首
属性
名称 | 说明 | |
---|---|---|
Arguments | 获取或设置参数函数。 | |
ExpansionProvider | 获取拥有此扩展功能的外接提供程序。 | |
FieldName | 获取或设置此扩展功能使字段的名称。 |
页首
方法
名称 | 说明 | |
---|---|---|
Equals | 确定指定的对象是否等于当前对象。 (继承自 Object。) | |
FieldChanged | 调用,则字段更改其值。 | |
Finalize | 允许对象在“垃圾回收”回收之前尝试释放资源并执行其他清理操作。 (继承自 Object。) | |
GetArgument | 获取指定的参数。 | |
GetCurrentValue() | 扩展功能的当前值作为字符串。 | |
GetCurrentValue(String%, Int32%) | 扩展功能的当前值。 | |
GetDefaultValue() | 扩展功能的默认值。 | |
GetDefaultValue(String%, Int32%) | 扩展功能的默认值。 | |
GetFieldValue | 获取指定字段的值。 | |
GetFunctionType | 获取函数的类型;即什么类型的值则函数返回。 | |
GetHashCode | 用作特定类型的哈希函数。 (继承自 Object。) | |
GetIntellisenseList | 获取外接函数可以返回任何值的列表。 | |
GetListCount | 获取的项数。值列表的扩展功能。 | |
GetListText | 获取值的指定列表项。 | |
GetSelection | 获取选定文本的范围在当前视图的。 | |
GetType | 获取当前实例的 Type。 (继承自 Object。) | |
MemberwiseClone | 创建当前 Object 的浅表副本。 (继承自 Object。) | |
ReleaseFunction | 释放 ExpansionFunction 类可以进行的任何分配。 | |
ToString | 返回表示当前对象的字符串。 (继承自 Object。) |
页首
备注
,在插入时,展开功能与在代码段模板的一个字段以为该字段提供值此代码段。请参见 Function 元素(IntelliSense 代码段) 有关如何的详细信息展开函数被声明为。
只要字段的值需要显示,展开 " 函数 “执行”,即,在表示外接功能的 ExpansionFunction 调用对象的方法返回适当的值。
对实现者的说明
如果支持在代码段的扩展功能的语言服务,必须从 ExpansionFunction 类派生类并实现 GetCurrentValue 方法。如果希望支持字段的多个值,则必须重写 GetIntellisenseList 方法返回值列表。最后,必须重写在 LanguageService 类的 CreateExpansionFunction 方法并返回 ExpansionFunction 类版本的实例。请注意扩展功能的名称传递给 CreateExpansionFunction 方法,使您可以实例化 ExpansionFunction 类的多个版本之一,每个扩展功能。
警告 |
---|
使用参数或需要访问其他字段的扩展功能不应与一个可编辑的字段,因为扩展提供程序可能不完全初始化,展开函数调用的时间。因此,展开函数无法获取其参数或其他字段的值。 应始终指定包含扩展功能的字段的一个适当的默认值默认值总是显示,则首先插入的代码段。 |
对调用者的说明
此方法在 LanguageService 类的 CreateExpansionFunction 创建方法。CreateExpansionFunction 方法从在又由 Visual Studio 调用的 ExpansionProvider 类的 GetExpansionFunction 调用时,已插入代码段时,和字段已完成。调用插入代码段到 InsertNamedExpansion, InsertSpecificExpansion,或者在 ExpansionProvider 的 DisplayExpansionBrowser 方法类别。
示例
此示例演示扩展功能的一个代码段文件和关联的实现。代码段有两个扩展功能,一个用于选项列表和第二更新的基于其参数的值的非可编辑的字段 (哪些,在本例中,是一个可编辑字段的值)。
代码段模板文件 (在这种情况下,调用 class.xml)。请注意定义 Function 扩展功能的标记。
<?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>
这是扩展功能的实现,以及如何从语言服务实例化。
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;
}
}
}
线程安全
此类型的任何公共 static(在 Visual Basic 中为 Shared) 成员都是线程安全的。但不保证所有实例成员都是线程安全的。