Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Аргумент функции const, Я перехожу с С++&MFC на C#! 
V
    Опции темы
Rapalex
Дата 14.8.2006, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 732
Регистрация: 20.1.2006
Где: Украина -> Ник олаев

Репутация: 2
Всего: 8



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


--------------------
In vitium ducit culpae fuga.
Желание избежать ошибки вовлекает в другую.
(Horatius)
PM ICQ   Вверх
mr.DUDA
Дата 14.8.2006, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Если аргумент - valuetype (т.е. int, char, bool и др.), то функция не может менять его значение, если аргумент не сделать с модификатором ref.

Если аргумент - ссылка на объект, то функция может делать всё что угодно с его полями, свойствами и т.д. Аналога модификатору аргументов const в шарпе нет.

Добавлено @ 15:06 
P.S. ничто не мешает в то же время сделать некоторые поля и свойства объекта readonly.


--------------------
user posted image
PM MAIL WWW   Вверх
ivashkanet
Дата 14.8.2006, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Цитата(Rapalex @  14.8.2006,  14:59 Найти цитируемый пост)
Можно ли в шарпе передать класс так чтоб функция не могла менять его значения а только читать, по анологис С контантный указатель на объект?

Код
DoSomething(myObject.Clone())

Правда объект должен уметь себя клонировать smile
(Иметь метод Clone())
PM MAIL WWW ICQ   Вверх
mr.DUDA
Дата 14.8.2006, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Насколько я знаю, в С++ модификатор const во многих случаях позволял компилятору генерировать более быстрый код, например если целый объект передавался без const - его поля копировались конструктором копирования (как твой Clone, ivashkanet smile), а если с const - передавался указатель на существующий объект.


--------------------
user posted image
PM MAIL WWW   Вверх
Rapalex
Дата 14.8.2006, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 732
Регистрация: 20.1.2006
Где: Украина -> Ник олаев

Репутация: 2
Всего: 8



ivashkanet, Создавать копию (клонировать) это долго.

Значит нет тут константный ссылок.

Спасибо!


--------------------
In vitium ducit culpae fuga.
Желание избежать ошибки вовлекает в другую.
(Horatius)
PM ICQ   Вверх
Void
Дата 14.8.2006, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 25
Всего: 173



Цитата(Rapalex @  14.8.2006,  18:52 Найти цитируемый пост)
Значит нет тут константный ссылок.

Действительно, нет. Но если очень нужно, то обычно делают не копию, а интерфейс, включающий в себя только методы и свойства, не модифицирующие состояние объекта:
Код
interface IMyClassConst
{
    int SomeProperty { get; }
}

class MyClass : IMyClassConst
{
    int _propValue;

    public MyClass(int x)
    {
        _propValue = x;
    }

    public int SomeProperty
    {
        get { return _propValue; }
        set { _propValue = value;  }
    }
}

...
void SomeFunction(IMyClassConst obj)
{
    int x = obj.SomeProperty;
    // obj.SomeProperty = 3; ошибка!
}

MyClass obj = new MyClass(0);
SomeFunction(obj);




--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
Rapalex
Дата 17.8.2006, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 732
Регистрация: 20.1.2006
Где: Украина -> Ник олаев

Репутация: 2
Всего: 8



Ну пнятно что есть свои способы защиты данных.

Всем спасибо!


--------------------
In vitium ducit culpae fuga.
Желание избежать ошибки вовлекает в другую.
(Horatius)
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0733 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.