#c# #android #xamarin.android
Вопрос:
Это полиморфизм, который я пропустил .. ToString()
в C#, вы не можете переопределить IEnumerable
метод an
Поэтому это
IEnumerablelt;chargt; chars = new Listlt;chargt; { 'a', 'b', 'c' }; chars.ToString();
не дает мне «азбуку».
Изучаю какой-то Xamarin.Android Мне интересно, как следующее преобразуется в правильную строку:
//In OnCreate FindViewByIdlt;EditTextgt;(Resource.Id.txt_username).TextChanged = GenerateNewPassword; //my method private void GenerateNewPassword(object sender, Android.Text.TextChangedEventArgs e) { passwordView.Text = e.Text.ToString(); }
Чего мне не хватает, почему это работает?
Комментарии:
1. Но что это за реальный тип? Каков истинный тип внутри
IEnumerablelt;chargt;
возвращаемого.Text
файла ? (У меня не установлено ничего Xamarin, что я мог бы использовать для проверки).. Строку можно рассматривать какIEnumerablelt;chargt;
:IEnumerablelt;chargt; x = "hello"
, и вы можете вызвать для нее функцию toString (), которая , поскольку это astring
, просто вернет строку..2. вы не можете переопределить метод toString() для IEnumerable — интерфейс IEnumerable накладывает ограничение на переопределяемость toString? Действительно?
Ответ №1:
ToString
Переопределение исходит от базового типа, а не от IEnumerablelt;Tgt;
. Я не уверен, как именно Xamarin обеспечивает это, но я предполагаю, что это пользовательский тип, который реализует IEnumerablelt;Tgt;
. Например, мы можем сделать это:
public class MyListlt;Tgt; : Listlt;Tgt; { public override string ToString() { return string.Join("", this); } }
И теперь мы можем сделать это:
IEnumerablelt;chargt; chars = new MyListlt;chargt; { 'a', 'b', 'c' }; Console.WriteLine(chars.ToString());
Который выведет:
азбука
Комментарии:
1. Ну, я и забыл о полиморфизме. Спасибо!
2. Я предполагаю, что Xamarin использует
Java.Lang.ICharSequence
под капотом.