Если вы решите пойти дальше, я бы посоветовал вам не использовать методы расширения.Как сказал кто-то еще, основное использование методов расширения - это когда у вас нет исходного кода.В вашем случае вы можете заменить метод расширения статическим фабричным методом внутри MyTextBox
.Или просто исключите эту идею и напишите:
var mytb = new MyTextBox(tb);
Я бы даже не советовал.Я думаю, что код, который вы пишете, является ненужным усложнением для в лучшем случае предельного выигрыша.
Одна проблема с этим кодом состоит в том, что он не учитывает возможные ошибки.Например, ваше неявное преобразование в int
не удастся, так как текстовое поле не содержит допустимого целого числа.Нет простого способа изменить оператор преобразования, чтобы приспособиться к проверке ошибок.Я полагаю, вы могли бы написать что-то вроде:
public static implicit operator int(MyTextBox o)
{
int val;
if (int.TryParse(o_textBox.Text, out val))
{
return val;
}
return -1;
}
Но тогда вы не сможете определить разницу между пользователем, вводящим «-1», и пользователем, вводящим «xyzzy».
И естьдальнейшее усложнение проверки значений.Преобразование в целое число - это только первый шаг.Вы также захотите убедиться, что введенное число находится в ожидаемых пределах.
Если вы соберете эти требования вместе, идея написания некоторого сложного кода даст вам целочисленное представление значения текстового поля - еслиэто действительное целое число - похоже, гораздо больше работы, чем стоит.