2010-10-04 2 views
0

Я пытаюсь кэшировать прокси-сервер в C# WCF-программе, поэтому мне не нужно создавать его каждый раз, когда я обрабатываю сообщение для другого клиента, поэтому моя цель - написать функцию, которая возвращает ссылку на прокси-сервер ,C#: Возвращение ссылки?

Я еще не полностью знаком с механизмами возврата C# по сравнению с параметрами «out» или «ref», поэтому задалось вопросом, приведет ли это к ссылке на возвращаемый объект _interface или копию или какое-либо другое поведение ,

 public IInterface GetInterface 
     { 
      return _interface; 
     } 

ответ

2

IInterface является ссылочным типом, поэтому он будет возвращать копию ссылки на объект какого класса реализует этот интерфейс. Вы все еще указываете на один и тот же объект, просто вызывающий код получает новую ссылку на тот же объект для собственного использования.

+1

Он вернет * копию * ссылки. –

+0

@ Ed: Хороший улов, я исправил свой ответ. – BoltClock

1

Классы являются ссылочными типами. Они неявно передаются копией ссылки. Итак, вы передаете ссылку в своем примере, но вы передаете копию ссылки. Это важно понять, передаете ли вы его методу, который меняет объект, на который ссылается ссылка на кучу. В этом случае вы просто указываете копию на новый объект, и исходная ссылка останется неизменной.

На стороне примечание, цель модификатора 'ref' состоит в том, чтобы передать фактическую ссылку, а не копию упомянутой ссылки.

1

Если конкретный тип реализации IInterface является фактически класс (в отличие от структуры); то да, ваш код вернет только ссылку на объект. (В противном случае, things are a bit more complicated.)

Фактически, при работе с классами на C# практически невозможно «случайно» создать копию самого объекта. Вам нужно будет явно вызвать некоторый метод, например MemberwiseClone или ICloneable.Clone.

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