我主要担心的是,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
我无法确定哪种方式更好.自定义扩展执行我想要他们做的事情或更多显示的代码来完成相同的任务?我真的很想学习“真正的”开发人员对这个主题的看法……
解决方法 就个人而言,我认为扩展方法可读性的“问题”被夸大了.如果您专注于使代码易于阅读,那么大多数情况下,这比执行代码更重要.如果开发人员想要追踪并了解幕后实际发生的事情,他们总是可以点击执行.扩展方法的主要问题是它们的发现方法 – 即通过指定的命名空间而不是指定的类.虽然这是另一回事:)
我不是建议你随意添加扩展方法,但是我会认真考虑你需要知道方法中每个表达式的工作方式,而不是通过它来查看它在广义上的作用.
编辑:您对术语的使用可能会误导您.没有“扩展对象”这样的东西 – 只有“扩展方法”,它们必须存在于静态类型中.所以你可能需要引入一个新类型,但你不会再创建任何对象.
总结以上是内存溢出为你收集整理的c# – 使用扩展:权衡利弊与利弊全部内容,希望文章能够帮你解决c# – 使用扩展:权衡利弊与利弊所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)