2012-06-05 2 views
0

У меня есть объект, который был инициализирован ранее в базовом классе. В унаследованном классе я использую этот объект и присваиваю ему значения для нескольких свойств. Пример:Назначить значения для нескольких свойств объекту

this.Chart.X = 10; 
this.Chart.Y = 10; 
this.Chart.Width = 20; 
this.Chart.Height = 20; 
this.Chart.Background = Color.Red; 

Однако, я должен повторять «this.Chart» много раз. Как этого избежать. Обратите внимание, что я не хочу повторно создавать этот объект снова, потому что в базовом классе он был инициализирован некоторыми общими значениями.

Спасибо.

+0

Откуда берутся значения? Чего вы пытаетесь избежать? Код, который у вас есть сейчас, выглядит просто отлично. – mellamokb

+2

Вам не нужно 'this.' Но это, вероятно, не то, что вы ищете. C# не имеет эквивалента VB 'With obj'. Вне инициализации объекта нет реальной сокращенной информации. –

+0

Если у вас есть много свойств для явного задания, вы не можете обойти назначения – TGH

ответ

1

Вы можете сделать набор методов расширения для Chart, которые реализуют fluent interface. Это позволит избавиться от некоторых из повторяющегося кода, так что ваш пример может выглядеть примерно так:

this.Chart.X(10).Y(10).Width(20).Height(20).Background(Color.Red); 

И вам даже не нужно this.

+1

Я бы рекомендовал использовать префикс Set для методов. Вот так: 'this.Chart.SetX (10) .SetY (10) .SetWidth (20) .SetHeight (20) .SetBackground (Color.Red);' См. Пример C# в ссылке Брайана. ИМО - префикс set-стиля в стиле Java упрощает понимание того, что происходит. –

+0

@PaulSasik: Согласен. Другим распространенным вариантом является 'With', как в' WithX'. –

-1

Вы можете использовать поле инициализатора так:

this.chart = new Chart {X = 10, Y = 10, Width = 20, Height = 20, Background = Color.Red}; 

Это избавляет вас от хлопот делать, this.chart.X = бла, бла this.chart.Y = ...

+2

Это решение требует объект должен быть воссоздан, чего я не хочу. Пожалуйста, внимательно прочитайте мой вопрос. Благодарю. –

+0

Извинения, я пропустил это в вашем вопросе. Ваши единственные реальные варианты - либо создать метод, который обновляет класс с необязательными параметрами, либо иметь дело с необходимостью «ctrl-v» «this.Chart» и нажать «.». ;) – Faraday

2

Если вы действительно отчаянным, чтобы сэкономить типизации вы могли бы написать функцию, чтобы сделать это:

static void InitializeChart(Chart c) { 
    c.X = 10; 
    c.Y = 10; 
    c.Width = 20; 
    c.Height = 20; 
    c.Background = Color.Red; 
} 

Или просто назначить схему локальной переменной:

var c = this.Chart; 
    c.X = 10; 
    c.Y = 10; 
    c.Width = 20; 
    c.Height = 20; 
    c.Background = Color.Red; 

Другой подход, если у вас есть контроль над базовым классом, заключается в том, чтобы предоставить ему некоторые параметры инициализации и задать свойства для правильных значений при построении диаграммы.

Смежные вопросы