गुण सिर्फ एक में अतिरिक्त जानकारी (मेटाडाटा) वर्ग, struct या कुछ सदस्य को जोड़ने के लिए तरीका है। कुछ निर्णय लेने के लिए यह मेटा-डेटा अन्य कोड द्वारा पुनर्प्राप्त किया जा सकता है।
सरल उदाहरणSerializableAttribute .NET से है। यह इंगित करता है कि कक्षा को बाद में बाइनरीफॉर्मेटर द्वारा क्रमबद्ध किया जा सकता है।
यहाँ एक और उदाहरण है - हम से संकेत मिलता है कि वे किसी भी परिवर्तनशील क्षेत्रों की जरूरत नहीं है और मल्टी-थ्रेडेड कार्यों के लिए ठीक हैं ImmutableAttribute के साथ हमारे कोड में कुछ वर्गों को चिह्नित कर सकते हैं:
[Immutable]
public sealed class ProcessingMessage
{
//... some code that should be thread-safe
}
फिर, हम एक इकाई परीक्षण बना सकता है जो विशेषता के साथ सभी वर्गों को पाता है और यह सुनिश्चित करता है कि they are immutable indeed:
[Test]
public void Immutable_Types_Should_Be_Immutable()
{
var decorated = GlobalSetup.Types
.Where(t => t.Has<ImmutableAttribute>());
foreach (var type in decorated)
{
var count = type.GetAllFields().Count(f => !f.IsInitOnly && !f.IsStatic);
Assert.AreEqual(0, count, "Type {0} should be immutable", type);
}
}
स्रोत
2009-06-10 17:32:33