具有属性的类被实例化时的C#回调

具有属性的类被实例化时的C#回调,c#,class,callback,attributes,initialization,C#,Class,Callback,Attributes,Initialization,当一个具有特定属性的类Foo被实例化时,是否有类似于回调的功能? 有点像这样的伪代码: void OnObjectWithAttributeInstantiated(Type attributeType, object o) { // o is the object with the attribute } 所以我试图创建一个属性AutoStore。想象一下: 给定带有该标记的类Foo: [AutoStore] public class Foo { ... } 然后(在代码的其他地方

当一个具有特定属性的类
Foo
被实例化时,是否有类似于回调的功能? 有点像这样的伪代码:

void OnObjectWithAttributeInstantiated(Type attributeType, object o) {
    // o is the object with the attribute
}
所以我试图创建一个属性
AutoStore
。想象一下:

给定带有该标记的类
Foo

[AutoStore]
public class Foo { ... }
然后(在代码的其他地方,无论在哪里)实例化该类

Foo f = new Foo()
我现在希望,这个对象
f
将自动添加到对象列表中(例如,在静态类或其他对象中)

如果没有这样的方法,你有什么想法如何做一个工作周围

编辑 我不想为了干净的代码而使用这样做的超类


向布里斯克利德致以最诚挚的问候

我认为你做不到。因为在运行时可以发现属性。但一个可能的解决方案可能是创建一个工厂来包装整个过程,比如-

公共类工厂
{
公共静态T实例化(),其中T:class
{
//实例化您的类型
T instant=Activator.CreateInstance();
//检查属性是否存在
if(typeof(T).GetCustomAttribute(typeof(AutoStore),false)!=null)
{
Container.List.Add(即时);
}
返回瞬间;
}
}
公共静态类容器
{
公共静态列表{get;set;}=new List();
}
然后你可以像这样使用它-

Foo-Foo=Factory.Instantiate();
foo.Bar=“Some Bar”;

我认为这是不可能的。属性被烘焙到编译的代码中,因此知道对象具有属性的唯一方法是查询对象的属性。不过这是一件很好的事情。谢谢!这是有点悲哀,这是不可能的,但它是因为它是。也谢谢你的想法。我会记住的