Я понятия не имею, возможно ли это вообще, но не так, как предполагается использовать атрибуты.Я не знаю, есть ли какие-либо гарантии относительно того, как и когда создаются экземпляры атрибутов.Например, вполне возможно, что каждый раз, когда вы запрашиваете тип или член для его атрибутов, они снова десериализуются из метаданных.
В основном я думаю, что вам следует рассматривать атрибуты являются неизменными после компиляции, даже если они имеют свойства с установщиками.
РЕДАКТИРОВАТЬ: Эта короткая, но полная программа, кажется, указывает, что Type.GetCustomAttributes
действительно может создавать новый экземпляр каждый раз, когда вы вызываете его:
using System;
using System.Runtime.CompilerServices;
[AttributeUsageAttribute(AttributeTargets.All)]
class FooAttribute : Attribute
{
}
[Foo]
class Bar
{
}
class Program
{
static void Main(string[] args)
{
var attr = typeof(Bar).GetCustomAttributes(typeof(FooAttribute), true)[0];
var attr2 = typeof(Bar).GetCustomAttributes(typeof(FooAttribute), true)[0];
Console.WriteLine(attr == attr2); // Prints False
}
}