CodeAttribute2.AddArgument 메서드
특성에 인수를 추가합니다.
네임스페이스: EnvDTE80
어셈블리: EnvDTE80(EnvDTE80.dll)
구문
‘선언
Function AddArgument ( _
Value As String, _
Name As Object, _
Position As Object _
) As CodeAttributeArgument
CodeAttributeArgument AddArgument(
string Value,
Object Name,
Object Position
)
CodeAttributeArgument^ AddArgument(
String^ Value,
[InAttribute] Object^ Name,
[InAttribute] Object^ Position
)
abstract AddArgument :
Value:string *
Name:Object *
Position:Object -> CodeAttributeArgument
function AddArgument(
Value : String,
Name : Object,
Position : Object
) : CodeAttributeArgument
매개 변수
- Value
형식: System.String
필수적 요소로서,기본값은 0입니다. 이 코드 요소 뒤에 새 요소가 추가됩니다.값이 CodeElement이면 인수 뒤에 새 요소인 CodeElement가 추가됩니다.값이 Long 데이터 형식이면 요소를 지정하여 이 요소 뒤에 새 요소를 추가합니다.컬렉션에서는 1부터 카운트를 시작하므로 0을 설정하면 새 요소가 컬렉션의 맨 처음에 놓이며,값을 -1로 지정하면 인수가 맨 끝에 배치됩니다.
- Name
형식: System.Object
필수적 요소로서,인수의 값입니다.
- Position
형식: System.Object
선택적 요소로서,인수가 명명된 매개 변수인 경우 이 매개 변수에는 인수의 이름이 포함됩니다.
반환 값
형식: EnvDTE80.CodeAttributeArgument
CodeAttributeArgument 개체입니다.
설명
참고
코드 특성 인수 값을 할당한 후에는 Visual Studio에서 이 값이 메모리에 유지되지 않습니다. 따라서 코드 특성 인수를 나중에 업데이트하면 이 값이 유효하지 않을 수도 있습니다. 즉, 나중에 인수에 액세스하면 E_FAIL이 반환되거나 전혀 다른 값이 반환될 수 있습니다. 그러나 요소의 자식에 영향을 주는 작업에서는 이 문제가 발생하지 않습니다.
이와 같이 동작이 명확하지 않으므로 인수의 값을 변경하려면 먼저 해당 값을 검색해야 합니다. 예를 들어, myAttrArg.Value = """a first value"""에서와 같이 코드에 코드 특성 인수를 설정한 경우 myAttrArg = myAttr.Arguments.Item("first value")에서와 같이 이를 업데이트하기 전에 명시적으로 참조한 다음 myAttrArg.Value = """a second value"""에서와 같이 새 값을 할당해야 합니다. 이렇게 하면 인수를 올바르게 변경할 수 있습니다.
또한 클래스, 구조체, 함수, 특성, 대리자 등의 코드 모델 요소를 특정한 방식으로 편집한 후에는 요소의 값이 명확하지 않을 수 있습니다. 즉, 요소의 값이 항상 같다고 할 수 없습니다. 자세한 내용은 코드 모델을 사용하여 코드 검색(Visual Basic)의 "코드 모델 요소 값이 변경될 수 있음" 단원을 참조하십시오.
예제
다음 예제에서는 현재 클래스에 새 네임스페이스와 특성을 만들고 특성의 일부 속성을 나열합니다.
public void CreateClassAndAttrib(DTE2 applicationObject)
{
// Before running, load or create a project.
FileCodeModel2 fcm2 = GetFileCodeModel(applicationObject);
CodeAttribute2 cmAttribute;
CodeClass2 cmClass;
String msg = null;
if (fcm2 != null)
{
CodeNamespace cmNamespace;
// Try to create a new namespace.
try
{
cmNamespace = fcm2.AddNamespace("CMNamespace", -1);
// If successful, create the other code elements.
if (cmNamespace != null)
{
cmClass = (CodeClass2)cmNamespace.AddClass("ANewClass",
-1, null, null, vsCMAccess.vsCMAccessPrivate);
cmAttribute = (CodeAttribute2)cmClass.AddAttribute
("NewAttribute", "AttributeValue", -1);
msg += "# of Arguments: " + cmAttribute.Arguments.Count
+ Environment.NewLine;
MessageBox.Show(msg);
cmAttribute.AddArgument("NewAddedValue", null, null);
msg += "# of Arguments: " + cmAttribute.Arguments.Count
+ Environment.NewLine;
MessageBox.Show(msg);
}
else
{
MessageBox.Show("Cannot continue - no filecodemodel
available.");
}
}
catch (Exception ex)
{
MessageBox.Show("ERROR: " + ex);
}
}
}
public FileCodeModel2 GetFileCodeModel(DTE2 applicationObject)
{
// Returns the FileCodeModel object of the active
// window.
TextWindow txtWin =
(TextWindow)applicationObject.ActiveWindow.Object;
FileCodeModel2 fcm2;
if (txtWin != null)
{
try
{
fcm2 = (FileCodeModel2)txtWin.Parent.
ProjectItem.FileCodeModel;
return fcm2;
}
catch (Exception ex)
{
MessageBox.Show("ERROR: " + ex);
return null;
}
}
else
return null;
}
.NET Framework 보안
- 직접 실행 호출자의 경우 완전히 신뢰합니다. 이 멤버는 부분적으로 신뢰할 수 있는 코드에서 사용할 수 없습니다. 자세한 내용은 부분 신뢰 코드에서 라이브러리 사용을 참조하십시오.