2011-01-05 55 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調用foo,但無關與C#屬性,它可以被遺傳。 – Firoso 2011-01-05 22:50:04

+0

Foo用TestClass測試繼承的[TestInitialize]屬性進行裝飾。但是,如上所述,屬性可以被繼承。 – 2011-01-05 22:56:31

回答

3

屬性默認繼承但這可以被禁用 - 見AttributeUsage.Inherited

如果你裝飾用AttributeUsage屬性的屬性定義,您可以設置該屬性:

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

如果不是因爲工作是讓foo方法虛擬,只是覆蓋它,並把TestInitialize在你的TestClass覆蓋方法

[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

謝謝 - 它正在工作,我只是沒有預料到它。我(無知)不認爲屬性可以繼承。 – 2011-01-05 22:57:29