2015-08-03 3 views
0

У нас есть свойства класса, который имеет поглотитель - возвращает значениеМожем ли мы передать параметр в свойство C#?

Ex:

Public Employee Department 
{ 
get { return GetTheValue("Mid Level") ;} 
} 

GetTheValue наш метод рамочной структуры, которая принимает значение параметра и возвращает строку. Параметр vlaue теперь жестко закодирован, и мы хотим сделать эту динамику ... Мы хотим передать это значение параметра непосредственно в Property. Можем ли мы передать параметр в свойство? Не хотите делать это как метод, пытаясь передать параметр только свойству. Как я могу это достичь?

+4

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

+1

Зачем ты * не * хотел сделать это методом? – Tom

ответ

7

Вы могли использовать indexer напоминающая свойство ...

public Employee this[string department] 
{ 
    get 
    { 
     return GetTheValue(department); 
    } 
} 
... 

var instance = new Whatever(); 
var employee = instance["Mid Level"] 

но это злоупотребление. Я бы просто использовал метод вместо этого ...

public Employee GetDepartment(string department) 
{ 
    return GetTheValue(department); 
} 
+0

У меня есть MULTIPLE свойства, если я изменяю их на индексаторы, как я могу их вызвать из экземпляра объекта .. instance ["???"] – msbyuva

+0

У вас может быть только один индекс для каждого типа. –

+0

Вы не можете, вот почему вы должны ** не ** использовать индексаторы для этого! –

3

Что вы делаете, прекрасно описывает цель метода. Вы хотите сделать это:

public Employee GetDepartment(string value) 
{ 
    return GetTheValue(value); 
} 

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

+0

(Я прихожу с миром). Я не собираюсь проголосовать за ваш ответ так, как вы делали мои, но **, чтобы быть справедливым ** это не отвечает на вопрос. Я полностью ценю то, что вы сделали в своем комментарии, но это возможно, что этот вопрос гипотетический и для целей образования.В (по общему признании) вероятном случае, что это не так, самое лучшее, что мы можем сделать, это предупредить об этом. Вероятно, искатель может найти, что индексаторы слишком ограничены для своих целей _anyway_ на основе комментария, который он оставил на моем ответе. –

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