Использование местоположения с разными типами элементов управления

#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 оператор совместно.