예. 속성이 클래스 (CodeClass)인지 인터페이스 (CodeInterface)인지 확인해야합니다. 두 경우 모두 모든 코드 (클래스/인터페이스) .Bases를 반복하고 ImplementedInterfaces를 재귀 적으로 확인해야합니다. 여기
어떤
예를 코드 (참고 :이 그냥 생각하는 것입니다) 당신의 응답을
private void ProcessDocument()
{
CodeElements elements = _applicationObject.ActiveDocument.ProjectItem.FileCodeModel.CodeElements;
foreach (CodeElement element in elements)
{
if (element.Kind == vsCMElement.vsCMElementNamespace)
{
CodeNamespace ns = (CodeNamespace)element;
foreach (CodeElement elem in ns.Members)
{
if (elem is CodeClass)
{
CodeClass cls = elem as CodeClass;
foreach (CodeElement member in cls.Members)
if (member is CodeProperty)
{
CodeType memberType = ((member as CodeProperty)).Type.CodeType;
ProcessElem(memberType as CodeElement);
}
}
}
}
}
}
private void ProcessElem(CodeElement elem)
{
if (null == elem) return;
// we only care about elements that are classes or interfaces.
if (elem is CodeClass)
{
CodeClass cls = elem as CodeClass;
CodeElements intfs = cls.ImplementedInterfaces;
// do whatever with intfs
// ...
CodeElements bases = cls.Bases;
foreach (CodeElement baseElem in bases)
ProcessElem(baseElem);
}
else if (elem is CodeInterface)
{
// same as class, figure out all other interfaces this interface
// derives from if needed
}
}
감사합니다. 구현 된 인터페이스를 얻으려고하는 요소는 CodeClass가 있다고 생각하지 않는 속성 (예 : CodeElement.Kind == vsCMElement.vsCMElementProperty)입니다. CodeElement 객체에서 CodeClass 객체를 가져 오는 방법을 알고 있습니까? –
보다 포괄적 인 예제로 업데이트되었습니다. – CDSO1