我将XmlAttribute作为XmlSerialize类作为示例:您可以将属性设置为类以选择应该序列化哪些属性,但是通过实现一个teorical接口IXmlSerializable可以很容易地完成同样的事情(它确实存在类似的东西,我不记得了)并重载了一个方法“Serialize”,该类只调用了你要序列化的属性上的Serialize(this.myProp1.Serialize()),同样用于反序列化
所以我基本上说的是:属性方法有点多余吗? (我实际上喜欢它,但我发现它与界面在逻辑上并不相同)
谢谢你的回答,正如我所说,这只是一个想法…希望有人会发现它很有趣
更新1:我用错误的方式解释了自己,我问的是“为什么我应该选择属性而不是接口(或相反)”,不完全是这个特定情况(我采用序列化因为是流行的第一件事在我的脑海里),顺便感谢你的答案,因为他们非常有趣
解决方法 好吧,从我能说的最好的情况来看,它们在逻辑上是不同的.实现IXmlSerializable会直接影响类本身,因为您要在类的实现中添加一个接口和一个或多个方法.从本质上讲,您正在为自己的班级负责任地制作自己的班级.
但是,添加XmlAttribute属性不会直接影响类的功能,而只是使用属性对其进行装饰,以便XmlSerializer可以执行实际的序列化功能.在这种情况下,您将序列化推迟到XmlSerializer类,并为XmlSerializer提供足够的有关您的类的元数据来完成它的工作.
这就是为什么我更喜欢后一种属性方法.当我写一个类时,我希望它是可序列化的,但我关心的最后一件事是实现的细节,所以我总是从thaqt方法开始,99%的时候它只用很少的工作就可以正常工作.但是,如果确实需要对序列化进行更细粒度的控制,请实现IXmlSerializable接口并编写自己的序列化代码.
总结以上是内存溢出为你收集整理的在C#中使用属性/接口的区别全部内容,希望文章能够帮你解决在C#中使用属性/接口的区别所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)