【发布时间】:2014-11-01 11:38:35
【问题描述】:
感谢 Morgano,我的问题的第一部分得到了解决..
好的,我可以在 Java 中执行此操作,但我在使用 C# 时遇到了一些问题..
这是我的基类(已剥离):
public abstract class Packet { }
这是我的派生类的一个示例(我有很多):
public class Foo : Packet
{
public override void Decode(DataInputStream input)
{
throw new NotImplementedException();
}
}
浏览了stackoverflow等网站一段时间后,终于找到了这个解决方案,但是要么不行,要么是我做错了。
public static List<T> GetInstances<T>()
{
return (from t in Assembly.GetExecutingAssembly().GetTypes()
where t.GetInterfaces().Contains(typeof(T))
&& t.GetConstructor(Type.EmptyTypes) != null
select (T)Activator.CreateInstance(t)).ToList();
}
我是这样称呼的:
Console.WriteLine(PacketDecoder.GetInstances<Packet>().Count + "");
Count 返回 0,表示没有任何类。
注意:我将所有这些都写成一个库,所以对 GetInstaces 的调用实际上是在另一个项目中,但是我考虑到这一点并将数据包类移到了可执行项目中,因为 -好吧,这没有任何影响。
【问题讨论】:
-
Google for C# 属性
-
谢谢,但天哪,这让我头疼,要复杂得多,而且到处都是,哈哈。
-
更新了问题,因为现在可以理解属性部分,但是反射仍然存在问题。
标签: java c# class interface annotations