Tag: 属性

属性或变量更改值时的Fire事件

我想为我所拥有的项目添加更多function,这些项目使用了.NET Framework中打包的许多类。 这些相同的类提供了许多属性,这些属性可以非常有用地适应我的项目的function,但是这些类缺少的一件事是事件。 如果每个属性都有一个适当的事件,只要这个属性的值发生变化就会触发,我可以根据这些属性值分配一个事件处理程序。 我制作了一个示例案例,以最简单的方式说明我的目标。 样例: System.Net.Sockets.Socket类( MSDN Docs上的Socket )有一个名为Connected的属性,如果套接字连接到指定的端点,则基本上返回true,否则返回false。 我想要完成的事情很简单。 我希望将此属性保留在“监视”下,当它的值发生变化时,触发一个事件。 这样做对我自己的一个类来说很简单,虽然使用INotifyPropertyChanged接口有点令人讨厌,只是因为我的代码总是改变了我必须手动触发事件的属性值。 不幸的是,据我所知,甚至这种程序都不能应用于.NET Framework中分布的现有Socket类。 好吧,这个问题变得非常广泛,抱歉,但我希望它能够深入了解我的目标。 现在简单地说,我想观察Socket类的Connected属性,当它的值发生变化时,触发一个事件。 如果有可能也使用这种方法来观察变量以及属性,那将是非常棒的,不仅对我而言,对于每个在SO上遇到这个问题的人来说都是如此。 当然,首选一种简单轻量级的方法,但最重要的是,我想了解它是如何完成的,所以将来我可以将它大规模地应用到其他类中。 我意识到我问了很多。 非常感谢。 有问题请问。

你能强制将枚举值序列化为整数吗?

可能重复: 如何将枚举值序列化为int? 大家好! 我想知道是否有办法强制将枚举值序列化为整数值,而不是其字符串表示forms。 让你进入上下文:我们在一个严重依赖Web服务的Web应用程序中使用我们所有请求头的单个基类,与请求的类型无关。 我想在标题中添加一个Result字段,因此我们可以将提示传递回调用应用程序,以了解操作在Web服务端的运行方式。 我们已经有一个枚举声明,但由于我们有遗留应用程序调用那些可能不知道这些枚举的Web服务,我想将这些值序列化为整数。 我们已经不得不通过使用[XmlElement(ElementName =“string representationOfAttributeName”)]来减少这些头的长度,因为我们偶尔会超过IE最大URL长度,我想知道是否有类似的属性来强制序列化枚举值为整数。 有没有人听说过这样的属性? 一如既往,感谢Pascal的帮助

C#中是否存在影响Intellisense如何显示类成员的属性?

是否有任何C#属性可以应用于类成员,以改变它们在Intellisense列表中的显示方式? 当我构建一个具有许多静态常量的类时,这突然出现在我脑海中,而我(简要地说)希望它看起来像Intellisense中的枚举。 是的,这太傻了。 但它让我思考 – 有没有什么方法可以让一些疯狂的程序员在Intellisense中让一个class级成员有不同的表现? 使字段看起来像属性等? 例如,有Obsolete属性: [Obsolete(“Stop using this. Really. It’s old.”)] public int VariableThatIsReallyOld; 其中的单词[obsolete]前缀为VariableThatIsReallyOld的描述。

C#make class自动注册

我有许多类型,我需要提供与外部世界对话的自定义函数。 例如,我可能有一个Widget和一个Sprocket,当我无法控制的世界数据到达并说“make a Widget”时,我需要调用一个Widget.Create()函数。 如果世界说“制造锤子”,那么我需要返回“锤子不存在”的错误。 但是,world-representation和type-name之间的映射不是1:1,所以我不能简单地使用reflection直接找到类型名称 – 我需要一个表。 (实际上,“名称”可以是例如特定的整数值。) 我理解如何使用从世界表示到类名映射的预定义表(或词典)。 我还了解如何在运行时扩展/更改此表,如果可能的类集更改。 (由于规则更改,或动态加载应用程序的部分,或其他。) 但是,所有这些都需要重复 – 我必须实现我的类,然后,在代码中的其他位置,记得添加“此类在外部世界中具有此名称”的实例。 这有点代码味道,因为将来某个时候我会写一个新类(或删除一个旧类)而忘记更新表,然后花时间调试它为什么不能正常工作。 我以为我可以在每个类中使用一个静态成员,它在全局表中注册自己: public static Registration Me = new Registration(typeid(MyClass), “My Name”); 不幸的是,在执行/访问类中的某个函数之前,不会初始化静态字段,因此这不会在启动时运行。 (静态构造函数具有类似的限制,加上运行时的更多开销!) 接下来的想法是使用自定义属性来装饰类,该属性表示“在表中注册此类”。 [Register(“My Name”)] class MyClass : …. { } 不幸的是,“Register”属性不知道它附加到哪个类 – 只有MyClass类知道它具有Register属性。 (这对我来说是令人生气的,因为如果属性知道他们所附着的地方会很容易,很多很多情况下都是如此。但这是暂时的!) 因此,我能想到的最不好的实现是使用reflection迭代所有程序集的所有类型,并检查它们是否具有此属性,如果是,则在表中注册它们。 我们说,这既不优雅也不高效。 是否有更好的方法来自动注册类而无需使用中央注册表更新其他源文件?

C#属性必需属性

我已经创建了属性 [AttributeUsage(AttributeTargets.Class, AllowMultiple = true)] [Serializable] public class TestPropertyAttribute : System.Attribute { public string Name { get { return _name; } set { _name = value; } }string _name; } 我应该将“名称”标记为此属性的强制属性。 怎么做?

在C#中,这个带“get”的代码是什么意思?

我是C#的新手。 private string m; public string M { get { return m; } } 这样的C#中的getter / setter就像Java一样吗?

使用IsDefined而不是GetCustomAttributes有什么好处

考虑一个程序集包含一个或多个属于自定义属性MyAttribute类型的情况,您需要获取这些类型的列表。 除了更紧凑的语法之外,使用IsDefined与GetCustomAttributes有什么好处? 是否暴露/隐藏了另一个没有的东西? 一个比另一个更有效吗? 以下是演示每种用法的代码示例: Assembly assembly = … var typesWithMyAttributeFromIsDefined = from type in assembly.GetTypes() where type.IsDefined(typeof(MyAttribute), false) select type; var typesWithMyAttributeFromGetCustomAttributes = from type in assembly.GetTypes() let attributes = type.GetCustomAttributes(typeof(MyAttribute), false) where attributes != null && attributes.Length > 0 select type;

派生类中的强制属性声明

我最近阅读了有关属性和reflection的内容,我认为在我的程序中包含元数据是一种很好的方法。 我有这个抽象类,我希望从它inheritance的所有类都向类声明一些属性,因为我希望为我的程序创建自定义组件(那些派生类),并希望在运行时读取这些类的元数据。 但是,派生类都必须显式声明我存储元数据的属性。 那么如何在派生类中强制执行属性声明呢? 谢谢。

C#:覆盖父类的属性

我有一个inheritance自X509Certificate2的类。 我希望NotAfter属性是UTC而不是本地时间。 我对C#很陌生,想知道下面我有什么是最好的方法吗? internal class Certificate : X509Certificate2 { public new DateTime NotAfter { get { return base.NotAfter.ToUniversalTime(); } } 编辑当我将其更改为: public override DateTime NotAfter { get { return base.NotAfter.ToUniversalTime(); } } Resharper抱怨说“没有合适的财产可以覆盖”

如何从属性中抛出编译错误?

.NET中有属性 (例如ObsoleteAttribute ),它们能够阻止编译或至少抛出编译时警告,具体取决于它们的配置。 如何编写一个能够干扰编译的属性? 有没有办法从微软以外的地方做到这一点?