2013-02-06 4 views
2

System.Web.UI.Page에서 직접 상속되는 경우 오류를 반환하는 Style Cop 규칙을 만들고 싶습니다. 내가보고있는 클래스를 나타내는 StyleCop.CSharp.Class의 인스턴스를 가져올 수는 있지만 거기에서 약간의 손실이 있습니다. 클래스 객체 (System이 아닌 StyleCop)는 Declaration 속성을 가지고 있습니다.이 속성을 사용하면 상속 된 클래스 이름을 포함하는 선언의 모든 항목을 가져올 수 있습니다. 그러나 이것이 반드시 유일성을 보장하지는 않습니다. 이 검출엄격한 상속 확인을 사용하여 사용자 지정 Style Cop 규칙을 만들려면 어떻게해야합니까?

충분히 쉽게 :

public class Foobar : System.Web.UI.Page {} 

하지만이 같은 상황은 불쾌한된다 ...이

using Page = Company.Some.Thing.Page; 
public class Foobar : Page {} 
같은 선언과 다른 수업을 특히

using Page = System.Web.UI.Page; 
public class Foobar : Page {} 

어떻게 생성 할 수 있습니까? 다른 이름 공간에 같은 이름을 가진 클래스에 의해 트립되지 않는 엄격한 타입 검사를하는 ule? 당신이 컴파일 코드가 아닌 소스 코드에 관심이로

답변

2

그것은,의 FxCop하지 Stylecop을위한 일이다. 자신의 BaseTypeSystem.Web.UI.Page인지 아닌지

당신은 단순히 반사의 비트를 (물론, 반성 실제로가) System.Web.UI.Page에서 상속 유형의 목록을 얻기 위해 수행해야 다음 확인.

internal class Test2 : Test 
    { 
    } 

    internal class Test : Program 
    { 
    } 

    internal class Program 
    { 
     private static void Main(string[] args) 
     { 
      foreach (var type in Assembly.GetExecutingAssembly().GetTypes()) 
      { 
       if (typeof(Program).IsAssignableFrom(type)) 
       { 
        if (type.BaseType == typeof(Program)) 
        { 
         Console.WriteLine("strict inheritance for {0}", type.Name); 
        } 
        else 
        { 
         Console.WriteLine("no strict inheritance for {0}", type.Name); 
        } 
       } 
      } 

      Console.Read(); 
     } 
    } 

no strict inheritance for Program 
strict inheritance for Test 
no strict inheritance for Test2 
: 여기

반사와 기본 예제