c# – 使用扩展:权衡利弊与利弊
最近我
asked a question关于如何清理我认为丑陋的代码.一个建议是创建一个扩展方法,它将执行所需的功能并返回我想要的功能.我的第一个想法是’太棒了! Extensions有多酷……“但经过一番思考后,我开始对使用Extensions有了第二个想法……
我主要担心的是,Extensions似乎是一种自定义的“快捷方式”,可以让其他开发人员难以遵循.我理解使用扩展可以帮助使代码语法更容易阅读,但是如何跟随幕后的声音呢? 以我之前的问题代码片段为例: if (entry.Properties["something"].Value != null) attribs.something = entry.Properties["something"].Value.ToString(); 现在用扩展名替换它: public static class ObjectExtensions { public static string NullSafeToString(this object obj) { return obj != null ? obj.ToString() : String.Empty; } } 并使用语法调用: attribs.something = entry.Properties["something"].Value.NullSafeToString(); 定义一个方便的方法,但它真的值得另一个类对象的开销吗?如果有人想重用我的代码片段而不理解扩展,会发生什么?我可以像使用相同的结果一样轻松地使用语法: attribs.something = (entry.Properties["something"].Value ?? string.Empty).ToString() 所以我做了一些挖掘,发现了一些关于使用Extensions的优点/缺点的文章.对于那些倾向于看看以下链接的人: MSDN: Extension Methods Extension Methods Best Practice Extension Methods 我无法确定哪种方式更好.自定义扩展执行我想要他们做的事情或更多显示的代码来完成相同的任务?我真的很想学习“真正的”开发人员对这个主题的看法…… 解决方法
就个人而言,我认为扩展方法可读性的“问题”被夸大了.如果您专注于使代码易于阅读,那么大多数情况下,这比执行代码更重要.如果开发人员想要追踪并了解幕后实际发生的事情,他们总是可以点击执行.
扩展方法的主要问题是它们的发现方法 – 即通过指定的命名空间而不是指定的类.虽然这是另一回事:) 我不是建议你随意添加扩展方法,但是我会认真考虑你需要知道方法中每个表达式的工作方式,而不是通过它来查看它在广义上的作用. 编辑:您对术语的使用可能会误导您.没有“扩展对象”这样的东西 – 只有“扩展方法”,它们必须存在于静态类型中.所以你可能需要引入一个新类型,但你不会再创建任何对象. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |