#c#
#c#
Вопрос:
Я хочу использовать следующий метод.
private void LocationChange(Object obj, int first, int second)
{
// so then if i say
obj.Location = new Point(first,second);
}
но у меня это не сработает, есть ли способ обойти это?
Спасибо за помощь
Ответ №1:
Поскольку Location
это свойство Control
, вы должны создать параметр этого типа:
private void LocationChange(Control control, int first, int second)
{
control.Location = new Point(first,second);
}
Затем вы можете передать любой тип, который относится к подклассам Control
, в этот метод.
Я не уверен, почему вы разрешили бы передавать any object
в метод, если он предназначен для конкретной работы с элементом управления, но если бы у вас была какая-то другая логика, не зависящая от элемента управления, вы могли бы привести параметр, например:
private void LocationChange(Object obj, int first, int second)
{
// Logic that operates on the object regardless of its type goes here...
// Although I'm not sure what that logic would be. :)
// This check works since .NET 2.0 (I believe?) and lets you avoid
// an InvalidCastException if obj happens NOT to be a subclass of Control...
if(obj is Control)
{
((Control)obj).Location = new Point(first,second);
}
}
Ответ №2:
У объекта нет свойства Location.. Это должно сработать.
private void LocationChange(Object obj, int first, int second)
{
// so then if i say
if (obj is Control)
{
(obj as Control).Location = new Point(first,second);
}
}
Комментарии:
1. Если
is
оператор проходит, вы можете просто выполнить прямое приведение. Нет необходимости использоватьas
оператор совместно.