Почему функция IEnumerable toString() работает в xamarin android?

#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 (), которая , поскольку это a string , просто вернет строку..

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 под капотом.