2013-09-13 4 views
0

У меня есть сложный тип объекта, для которого я переопределяю метод base.ToString(), чтобы он возвращал значение свойства строки.Возможно ли переопределить назначение «=» в C#

, например:

class foo 
{ 
public string StringValue{get;set;} 
public int SomeOtherValue{ get;set;} 
public override ToString() 
{ 
    return StringValue; 
} 
} 

Так что это позволяет мне использовать получить значение свойства StringValue легко.

Есть ли способ, которым я могу переопределить или расширить базовую функциональность, чтобы я мог использовать простой код, например ниже, для установки свойства StringValue?

foo aFoo = new foo(); 
aFoo = "Some string value"; 
+1

Is 'aFoo.StringValue =" Некоторое строковое значение ";' действительно *, что * toerous для ввода? ;-) –

+0

Теперь, когда я правильно прочитал вопрос, я должен согласиться с Адамом. C# не предлагает здесь никакой поддержки, так что чтение кода позволяет понять, что именно происходит. Мы ничего не узнали из C++? – Jon

+1

Btw, что бы вы хотели? Ленивости? (не поймите меня неправильно, я это уважаю) Или намерение запутать ваших коллег-разработчиков? :-D Серьезно, я действительно ненавижу все виды перегрузки оператора. Если ничего другого, «Перейти к определению» не работает, и у вас нет указаний на то, что происходит, глядя на код. – Groo

ответ

0

Нет, это невозможно. Оператор присваивания не является переопределяемым и не без оснований.

Разработчики, даже в пределах C# и современных объектно-ориентированных языков программирования, часто «злоупотребляют» системой, чтобы заставить ее делать то, что она не должна делать. Если вы могли бы назначить другое значение, чем передать ссылочное значение переменной в оператор присваивания, подумайте о хаосе, который будет создан, когда неопытные разработчики используют его.

Что вы можете сделать, это предоставить методы, позволяющие ваш объект принимает значения из строки, как так:

afoo.TakeValuesFrom("Some string value"); 

или

MyThingy afoo = MyThingy.FromString("Some string value"); 

, который будет практически идентичен что вы просите, и совершенно легально и удобочитаемо.

+1

Хотя ответы всех остальных действительны, я выбираю ваш для предложения добавления метода FromString, с которым я буду работать. – ChrisBD

7

Вы не можете перегрузить оператор = как указано here

См this page для полного списка перегружаемых операторов.

3

Вы можете использовать неявные перегрузки оператора литого: http://msdn.microsoft.com/library/z5z9kes2.aspx

+1

Это вызовет создание совершенно нового 'foo', а не просто свойство' StringValue' существующего 'foo'. Тем не менее, это может быть достаточно хорошим решением в зависимости от использования. –

0

Нет, вы не можете. Это защищенная часть спецификации языка C#. Возможность переопределить это было бы как переопределение способности ваших тел дышать воздухом с дыхательной водой.

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