2011-01-05 2 views
0

속성이 C#에서 상속되지 않으므로 (최소한 생각하지는 않았습니다) - MyTestMethod 테스트를 실행할 때 다음 코드가 Hello 팝업을 표시하는 방식은 다음과 같습니다.C# 속성 상속을 가정하지 않습니다.

[TestClass] 
public class BaseTestClass { 
    [TestInitialize] 
    public void Foo() { 
     System.Windows.Forms.MessageBox.Show("Hello"); 
    } 
} 

[TestClass] 
public class TestClass : BaseTestClass { 
    [TestMethod] 
    public void MyTestMethod() { 
     Assert.IsTrue(true); 
    } 
} 
+0

는 MyTestMethod는 푸를 호출하지 말아야하지 않는,하지만 C#을 속성과는 아무 상관이 없습니다 , 이는 우연히 상속 될 수 있습니다. – Firoso

+0

Foo는 TestClass 테스트에서 상속되는 [TestInitialize] 특성으로 장식되어 있습니다. 그러나 예, 언급 한 바와 같이 속성을 상속 할 수 있습니다. –

답변

3

속성은 기본적으로 상속하지만이 비활성화 할 수 있습니다 - AttributeUsage.Inherited

를 볼 당신이 AttributeUsage 속성 속성 정의를 장식하는 경우, 당신은이 속성을 설정할 수 있습니다

[AttributeUsage(AttributeTargets.Class, Inherited = false)] 
public class MyAttribute : Attribute 
{ 
} 
0

대로 작동하지 않는 경우 방법 푸 가상하고 그냥 무시하고 TestClass에 재정의 방법에 TestInitialize을 넣어이다

[TestClass] 
    public class BaseTestClass 
    { 

    public virtual void Foo() 
    { 
     System.Windows.Forms.MessageBox.Show("Hello"); 
    } 
    } 

    [TestClass] 
    public class TestClass : BaseTestClass 
    { 
    [TestInitialize] 
    public override void Foo() 
    { 
     base.Foo(); 
    } 

    [TestMethod] 
    public void MyTestMethod() 
    { 
     Assert.IsTrue(true); 
    } 
    } 
+0

감사합니다 - 작동 중입니다. 나는 기대하지 않았습니다. 나는 (무식하게) 속성이 상속받을 수 있다고 생각하지 않았습니다. –

관련 문제