gpt4 book ai didi

c# - 在 C# 中使用属性/接口(interface)的区别

转载 作者:行者123 更新时间:2023-11-30 13:21:00 26 4
gpt4 key购买 nike

这不是一个恰当的问题,而更像是我最近的一个想法。我以 XmlAttribute 到 XmlSerialize 一个类为例:您可以将属性设置为一个类以选择应该序列化哪些属性,但是通过实现一个 teorical 接口(interface) IXmlSerializable 可以很容易地完成同样的事情(它确实存在类似的东西,我不记得了)并通过为该类重载一个方法“Serialize”,该方法只对您要序列化的属性调用 Serialize(this.myProp1.Serialize()),与 Deserialize 相同

所以我基本上要说的是:Attribute 方法不是有点多余吗? (我其实很喜欢它,但我不觉得它在逻辑上与界面有什么不同)

感谢任何回答,正如我所说这只是一个想法......希望有人会觉得它有趣

更新 1: 好吧,我用错误的方式解释了自己,我要问的是“为什么我应该选择属性而不是接口(interface)(或相反)”,不完全是这个特定情况(我进行连载是因为这是我脑海中首先想到的事情),顺便感谢您的回答,因为它们非常有趣

最佳答案

从评论和反对票来看,也许我应该在这里强调我的主要观点:可以节省我小时的工作(每种类型)和可怕的代码复杂性的东西不是 多余,但非常非常欢迎。


“很容易”?好的;我在序列化方面非常有经验,但实现它并不我称之为简单。事实上,恰恰相反。

如果您不想使用属性,XmlSerializer 有一个重载,允许您在运行时配置它。

但是每当我听到“implement IXmlSerializable”时,我都会不寒而栗。属性方法非常快速和简单:

[XmlRoot("foo"), XmlType("foo")]
[XmlInclude(typeof(SuperFoo))]
public class Foo {
public string X {get;set;}

[XmlAttribute("y")]
public int? Y {get;set;}

[XmlElement("item")]
public List<string> Items {get;set;}
}
public class SuperFoo : Foo {}

我挑战你在 2 小时内为那个非常简单的示例编写一个IXmlSerializable健壮实现...并记住每一个你写的一行是你必须维护的一行。

关于c# - 在 C# 中使用属性/接口(interface)的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3309508/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com