2016-11-18 6 views
7

<see cref="..." />XML documentation 태그의 연산자를 참조하고 싶습니다. 그러나 어떻게 수행 할 것인지에 대한 힌트를 찾을 수 없습니다. 이 태그의 MSDN article은 메소드를 참조하는 간단한 예제 만 표시하지만 참조 할 수있는 여러 유형의 멤버는 넘지 않습니다.XML 문서의 참조 연산자

특히, 암시 적 변환 연산자을 참조하고 싶지만 참조 연산자에 대한 일반적인 규칙도 이해할 수 있습니다. 하나 <see cref="MyStructure.Value" />으로 Value 속성을 참조 할 수 있습니다 간단하게 충분히

public struct MyStructure 
{ 
    public int Value { get; set; } 

    public static bool operator ==(MyStructure x, MyStructure y) => x.Value == y.Value; 

    public static bool operator !=(MyStructure x, MyStructure y) => x.Value != y.Value; 

    public static implicit operator MyStructure(int i) => new MyStructure { Value = i }; 
} 

:하지만,


는 이제 우리가 ==, != 및 암시 적 변환 연산자를 정의하는 간단한 구조를 가지고 있다고 가정 해 봅시다 == 연산자를 참조하는 방법에 대해 알려주십시오. 나는 분명히 <see cref="MyStructure.==" /><see cref="MyStructure.==(MyStructure, MyStructure)" /> 시도했지만 나는이 두 관찰의 때문에이 정상적으로 작동합니다 생각하지 않습니다

이 운영자는 다른 회원들에 반대 요약을 보여주는 툴팁에 착색되지는 착색되는
  1. 적절하게 참조 될 때
  2. 명령은 다른 제대로 참조 회원
  3. 위해하는 반면 작동하지 않는 정의로 이동

나는 또한 HTML을 생성하는 데 사용 Sandcastle 같은 의심 도구XML 문서을 기반으로 한 페이지는 유효한 하이퍼 링크를 생성하지 않지만 확인해야합니다.

편집

난 그냥 샌드캐슬 내 시도의 유효 하이퍼 링크를 생성하지 않는 것을 확인했다. 프로젝트 속성에서 XML 문서를 생성 할 수있는 옵션을 선택하면 또한, 코드 CS1584와 경고가 말하는 표시됩니다 "XML 주석 구문 잘못된 CREF 속성이 'MyStructure을. =='".


정당성 경우 누군가가 궁금해

왜 대답은 내가 시험에 대한 참조를 넣어 일반적 연산자와 같은 테스트를 수행하는 단위 테스트 방법을 쓰고있는 연산자를 참조 할 할 테스트 방법은 XML 문서의 멤버.

/// <summary> 
/// This method performs tests regarding <see cref="..." /> operator 
/// </summary> 
[TestMethod] 
public void ImplicitConversionOperator() { ... } 
+0

[여기] (https://msdn.microsoft.com/en-us/library/fsbx0t7x.aspx)에서 다음과 같이 사용할 수 있습니다 :''. 나는 그것을 시도하고 w/o 경고를 컴파일하고 XML로 만든다. IDE 동작은 여전히 ​​불완전합니다. – Clay

+0

@Clay 경고가 사라 졌다는 것이 맞습니다.하지만 불행히도 다른 문제는 아직 해결되지 않았습니다. 'M :'을 앞 (또는 콜론 뒤에 오는 다른 글자)으로두면 경고없이 그 뒤에 거의 모든 것을 넣을 수 있습니다. ''경고를 발생시키지 않습니다. 이상하게도, 두 글자와 콜론은 날아 가지 않습니다 ... – Grx70

+0

예 - 나는 그걸 가지고 놀고있었습니다. 'M'과 같을 수도 있습니다. – Clay

답변

3

내가 VS 2015 기업에있어 ... 몰라 '다른 버전의 한판 승부 : 그래서 난 후 것은 이것이다.참조하기 위해, 그리고

/// <summary>The name sez it all</summary> 
public struct MyStruct 
{ 
    /// <summary>implicit</summary> 
    /// <param name="i">an int</param> 
    public static implicit operator MyStruct(int i) 
    { 
    return new MyStruct(); 
    } 
    /// <summary>Thus and so</summary> 
    public static bool operator ==(MyStruct a, MyStruct b) 
    { 
    return false; 
    } 

    /// <summary>Thus and so</summary> 
    public static bool operator !=(MyStruct a, MyStruct b) 
    { 
    return true; 
    } 

    /// <summary>Thus and so</summary> 
    public override bool Equals(object obj) 
    { 
    return base.Equals(obj); 
    } 

    /// <summary>Thus and so</summary> 
    public override int GetHashCode() 
    { 
    return base.GetHashCode(); 
    } 

    /// <summary>Thus and so</summary> 
    public override string ToString() 
    { 
    return base.ToString(); 
    } 
} 

,이 작품과는에 표시되지 않는다는 점을 제외 (모든 IDE 기능으로 점등 : 그것은 당신이 당신의 연산자를 문서화 할 경우, 당신은 전체에 대한 올바른 동작을 얻을처럼 보인다 회원 드롭 다운) :

/// <summary> 
/// See <see cref="MyStruct.operator=="/> 
/// </summary> 
[StructLayout(LayoutKind.Sequential)] 
internal struct BY_HANDLE_FILE_INFORMATION 
{ 
    //... 
} 

여기까지 이동 기능이 작동합니다.

편집 :

암시 적 연산자는 다음과 같습니다

<see cref="MyStruct.op_Implicit(int)" 
+0

좋은 캐치, 실제로 작동합니까! 그래도 변환 연산자에 대한 생각은 없습니까? – Grx70

+0

@ Grx70, 대답을 편집했습니다 ... XML 출력이 회원에게 무엇인지를 바로 보았습니다 :-) – Clay

+0

답변에 기반을 두었습니다. 잠시 동안 놀아 보았습니다. 대체 답으로 내 발견을 게시했습니다. – Grx70

2

클레이의 대답 @에 정교 - 두 가지 방법이 있습니다 (내가 아는) 참조 사업자의 <see (...)/>XML 문서에 태그 :

1. 생성 된 메서드 이름 사용

참조 용으로 this question을 참조하십시오. 항등 연산자에 대한

bool operator ==(MyStructure x, MyStructure y) 참조가 암시 적 변환 연산자에 대한

<see cref="MyStructure.op_Equality(MyStructure, MyStructure)" /> 

입니다 implicit operator MyStructure(int i)는 (지금까지 내가 말할 수있는)

<see cref="MyStructure.op_Implicit(int)" /> 

그러나이 방법의 단점이있다 . 변환 연산자의 경우 메서드 이름은 implicitexplicit 연산자 각각에 대해 op_Implicitop_Explicit입니다. 이러한 메서드의 여러 오버로드를 반환 형식에 의해서만 다를 수 있습니다. 예를 들어,이 두 운영자 :

public static implicit operator int(MyStructure s) => s.Value; 
public static implicit operator double(MyStructure s) => s.Value; 

이러한 방법으로 생성 될 것이다

int op_Implicit(MyStructure) 
double op_Implicit(MyStructure) 

이어서이 참조 :

<see cref="MyStructure.op_Implicit(MyStructure)" /> 

모호 할 것이며,이 중에서 조작자에 폴백 것 먼저 정의됩니다. 당신은 또한 그 말을 경고합니다.

2.

<see cref="MyStructure.implicit operator MyStructure(int)" /> 

은 물론 앞서 언급 한 예를 명확하게하는 데 아무런 문제가 없습니다 : C# 운영자 이름

항등 연산자 bool operator ==(MyStructure x, MyStructure y)를 들어

참조가

<see cref="MyStructure.operator ==(MyStructure, MyStructure)" /> 

및 암시 적 변환 연산자 implicit operator MyStructure(int i)위한 사용 :

<see cref="MyStructure.implicit operator int(MyStructure)" /> 
<see cref="MyStructure.implicit operator double(MyStructure)" /> 

기타 고려 사항

내가 발견 한 또 다른 차이점은 첫 번째가 아닌 반면, 두 번째 방법이 제대로 CodeLens 인식 때문이다.