扩展方法是否类似于在c#中使用“new”关键字方法?
我们可以在扩展方法和继承之间建立一些关系吗?
或者是一种类似于在C#中使用new-keyword的扩展方法? 解决方法
两个问题都没有.扩展方法实际上是一种方法,它将扩展操作的对象作为第一个参数.
new关键字用于为类的实例分配资源.扩展方法对实例进行操作,但不能作为新替换,因为它需要一个实例(或该类型的null)作为第一个参数. 考虑: public static class StringExtensions { public static string Reverse(this string _this) { // logic to reverse the string } } 您可以通过两种方式调用此静态方法: // as an extension method: string s = "hello world"; string t = s.Reverse(); // as a static method invocation: string t = StringExtensions.Reverse(s); 在任何一种情况下,编译器都会更改MSIL中的调用以映射第二个调用.编译之后,如果没有this-keyword,你就无法识别它的静态对应的扩展方法. 总结一下 >扩展不是课程的一部分 编辑: 扩展方法与new关键字的任何含义无关.然而,这里有一些关于彼此的想法.我希望它不会让事情更加混乱.如果是这样,请坚持“编辑”上方的部分;) >在新修饰符上: > new修饰符用于隐藏现有方法.扩展方法永远不能隐藏现有方法,因为声明是静态方法.当你这样做时,你甚至不会得到编译时警告或错误. >关于新的通用约束: >约束将允许的泛型类型限制为具有可访问的无参数构造函数的类型.扩展方法与泛型无关. // this ext. method will only operate on classes that inherit // from ICollectible and have a public parameterless constructor public static int CalculateTotal<T>(this T _collectible) where T : ICollectible,new() { // calculate total } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- c – Qt:无效使用不完整类型和前向声明
- C / Boost用于管理资源生命周期的共享资源类,如shared_ptr
- 解决PLSQL查不到带中文条件的记录
- objective-c – 为什么initWithCoder不能正确地初始化项目?
- 正则删除所有空行
- react-native run-android 运行出错 No connected devices!
- Oracle database audit file housekeeping methods – adum
- 如何在转发器C#中传递多个选中的复选框值
- cocos2D-X源码分析之从cocos2D-X学习OpenGL(3)----BATCH_
- PostgreSQL连接Python