Объекты в качестве параметров методам передаются по ссылке. Соответственно их могут в методе модифицировать.
Хочу написать метод, который принимает объекты по ссылке на const (как это часто происходит в C++). Как это сделать?
const в заголовке метода никуда не подходит — говорит ошибка
Re: Как реализовать передачу параметров по ссылке на const?
Здравствуйте, Labutin, Вы писали:
L>Объекты в качестве параметров методам передаются по ссылке. Соответственно их могут в методе модифицировать. L>Хочу написать метод, который принимает объекты по ссылке на const (как это часто происходит в C++). Как это сделать? L>const в заголовке метода никуда не подходит — говорит ошибка
Могу посоветовать сделать generic-обертку над передаваемым типом (если конечно речь идет о C# 2.0):
struct const_ref<T>
{
readonly T t;
const_ref(T t)
{
this.t = t;
}
public static implicit operator T (const_ref<T> crt)
{
return crt.t;
}
public static const_ref<T> make(T t)
{
return new const_ref<T>(t);
}
}
class Test
{
public static void Proc(const_ref<int> ci, const_ref<string> cs)
{
int i = ci; // okstring s = cs; // ok
ci = 10; // failed
cs = "ldkfl;"; // failed
}
public static void Call()
{
Proc(const_ref<int>.make(10), const_ref<string>.make("sdjkfjsld"));
}
}
Более простого решения я не вижу, во всяком случае в плане эффективности.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: Как реализовать передачу параметров по ссылке на cons
Здравствуйте, Константин Л., Вы писали:
КЛ>не спасет от изменения мемберов
Понятно, что без нормальной поддержки константности со стороны языка эта проблема не решается.
Обычно в качестве решения приводят глубокое копирование, что мягко говоря совсем .
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: Как реализовать передачу параметров по ссылке на cons
Здравствуйте, NoOneKnows, Вы писали:
NOK>Может, покажется интересным почитать интервью с Anders Hejlsberg'ом?
NOK>1. Ищите слово Immutables (с учетом регистра): CLR Design Choices NOK>2. Ищите "Are you asking why we don’t have": Transcript: Whiteboard with Anders Hejlsberg
Это всё старо как мир. Честно говоря домыслы Hejlsberg-а мне всегда были мало интересны.
Его взгляды на const давно известны и их далеко не все разделяют.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: Как реализовать передачу параметров по ссылке на cons
Здравствуйте, Denis2005, Вы писали:
L>>Объекты в качестве параметров методам передаются по ссылке. Соответственно их могут в методе модифицировать. L>>Хочу написать метод, который принимает объекты по ссылке на const (как это часто происходит в C++). Как это сделать? L>>const в заголовке метода никуда не подходит — говорит ошибка
D>Могу посоветовать сделать generic-обертку над передаваемым типом (если конечно речь идет о C# 2.0):
А можешь написать код, в котором без твоего
D>struct const_ref<T>
D>{
// …
D>}
что-то не работает?
Вот посмотри следующий пример:
public static void Proc(int ci, string cs)
{
int i = ci; // okstring s = cs; // ok
ci = 10; // ok (*)
cs = "ldkfl;"; // ok (**)
}
и расскажи, какие проблемы и где могут возникнуть из-за того, что строки (*) и (**) удачно компилируются
Help will always be given at Hogwarts to those who ask for it.
Re[4]: Как реализовать передачу параметров по ссылке на cons
Здравствуйте, Denis2005, Вы писали:
D>Здравствуйте, Константин Л., Вы писали:
КЛ>>не спасет от изменения мемберов
D>Понятно, что без нормальной поддержки константности со стороны языка эта проблема не решается. D>Обычно в качестве решения приводят глубокое копирование, что мягко говоря совсем .
да и пример ты привел не в тему. Без твоего const_ref и ref'а C#'па в методы передаются копии ссылок. Автор наверняка хотел именно запрет на изменение мемберов.
Как реализовать передачу параметров по ссылке на const?
От:
Аноним
Дата:
21.01.07 10:53
Оценка:
CLR — не поддерживает такой возможности, соответственно это и не реализовано в C#.
С ув. Сергей.
История — это огромная система раннего предупреждения.
Norman Cousins