为何在Xamarin.Android中对IEnumerable<char>调用ToString()可正常生效?
你遗漏的核心知识点是:多态调用的是运行时实际类型的方法实现,和声明时的父类型无关,且两个场景中调用ToString的对象实际类型完全不同
- 第一个基础C#示例的执行逻辑:
你声明的IEnumerable<char> chars实际运行时类型是List<char>,而List<char>没有重写object.ToString()方法,所以调用后只会返回类的完整限定名,不会输出集合内容。你之前的理解是正确的:接口本身无法重写方法,重写是实现类的行为,只要实现IEnumerable<char>的类没有自己重写ToString(),就会继承object的默认实现。 - Xamarin.Android场景的执行逻辑:
Android.Text.TextChangedEventArgs的Text属性类型是IEditable,并非普通的IEnumerable<char>。安卓框架中所有实现IEditable接口的类(比如默认使用的SpannableStringBuilder)都专门重写了ToString()方法,作用就是直接返回当前持有的纯文本内容。
哪怕IEditable确实继承了IEnumerable<char>,运行时调用的是实际实现类重写后的ToString(),自然就能得到你期望的字符串结果。
内容的提问来源于stack exchange,提问作者schgab
相关产品推荐
相关产品推荐

