ФорумПрограммированиеБольше языковC/C++ и C# → Особенности C#. Поля и свойства класса

Особенности C#. Поля и свойства класса

  • Chiffa

    Сообщения: 510 Репутация: N Группа: Джедаи

    Spritz 16 августа 2009 г. 6:29, спустя 24 дня 3 часа 41 минуту

    Попробую внести свою лепту в развитие раздела по шарпу. Начну с рассказа о некоторых особенностях и возможностях языка, которые выгодно (?) отличают его от других. Об этом конечно можно прочитать в учебниках, но опыт показывает что лучше бы знать о их существовании заранее.
    За одно уважу товарищей, желавших подискутировать на тему возможностей и плюшек языка.
    Итак, свойства (properties) класса.
    Обычно для доступа к приватным полям используются методы - геттеры и сеттеры. В синтаксисе С# есть удобная обертка, позволяющая работать с установкой и получением значений для приватных переменных, как если бы они были открытыми. При этом принцип сокрытия данных не рушиться, вся необходимая валидация имеет место быть.
    Выглядит это так:

    public class UserScoreData
    {
        //приватные поля

         int _uid ;  
         int _score;
         string _username;
             
    // соответствующие им паблик-свойства
               
         public int Uid {
             get {
       return _uid;
             }
             set{
          //все необходимые проверки…
           _uid = value;

             }
         }
         public int GameScore { get { return _score; } set{ _score = value;} }
         public string UserName { get { return _username; } set {_username = value;} }
               
    }


    Теперь работа с полями класса будет происходить как с обычными переменными.

    UserScoreData currentUser = new UserScoreData ();
    currentUser.UserName = "Вася";
    int currentScore = currentUser.GameScore;


    Фичу эту очень хвалят за удобство и несмешивание логики поведения (методы-аксессоры) и состояния (поля) объекта. Лично мне идея нравится. Если кто не знал, берите на заметку.
    А насколько она крута и достойна подражания, можно спорить, а можно и не спорить))
    Кстати, есть ли нечто подобное в других языках программирования? Насколько я знаю нету. Но мало ли:)
  • Timur

    Сообщения: 1068 Репутация: N Группа: Джедаи

    Spritz 13 июля 2009 г. 7:18, спустя 49 минут 49 секунд

    Кстати, есть ли нечто подобное в других языках программирования? Насколько я знаю нету. Но мало ли:)


    В дельфях есть
    Спустя 88 сек.
    а ещё в Ruby и ActionScript
  • krasun

    Сообщения: 1370 Репутация: N Группа: Джедаи

    Spritz 22 июля 2009 г. 14:01, спустя 9 дней 6 часов 42 минуты

    в С++ через прокси-классы можно сделать
    Спустя 20 сек.
    в php __set, __get
    Спустя 50 сек.
    в Java должно быть
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 22 июля 2009 г. 14:04, спустя 3 минуты 52 секунды

    krasun, почитай получше про гет и сет))

    они вызываются ТОЛЬКО КОГДА ПОЛЯ НЕ ПРИСУТСТВУЮТ О ОБЪЕКТА. в любом ином случае ОНИ НЕ ВЫЗЫВАЮТСЯ
    Сапожник без сапог
  • krasun

    Сообщения: 1370 Репутация: N Группа: Джедаи

    Spritz 22 июля 2009 г. 14:08, спустя 3 минуты 10 секунд

    phpdude, ты про php?
    Спустя 37 сек.
    точно, я забыл уже совсем, кошмар, вот что значит долго чем-то не пользоваться
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 22 июля 2009 г. 14:24, спустя 16 минут 20 секунд

    krasun, это я про пыхапы
    Сапожник без сапог
  • Timur

    Сообщения: 1068 Репутация: N Группа: Джедаи

    Spritz 22 июля 2009 г. 17:22, спустя 2 часа 57 минут 41 секунду

    в Java должно быть

    нет
  • krasun

    Сообщения: 1370 Репутация: N Группа: Джедаи

    Spritz 22 июля 2009 г. 17:23, спустя 1 минуту 33 секунды

    Timur, оно что там вообще ни как не реализовано?
  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 22 июля 2009 г. 17:27, спустя 4 минуты 9 секунд


    Timur, оно что там вообще ни как не реализовано?
    там есть приватные свойства и публисные методы.

    public class MyClass{
    private String myString;
    public String getMyString(){
    return myString;
    }
    public setMyString(String myString){
    this.myString = myString;
    }
    }
    Спустя 26 сек.
    такой класс называется BEAN
  • krasun

    Сообщения: 1370 Репутация: N Группа: Джедаи

    Spritz 22 июля 2009 г. 17:32, спустя 4 минуты 31 секунду

    а ну это знаю
    Спустя 25 сек.
    только тогда, наверное, приватные поля
  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 22 июля 2009 г. 17:37, спустя 4 минуты 46 секунд


    а ну это знаю
    Спустя 25 сек.
    только тогда, наверное, приватные поля
    почему поля? есть свойства и есть методы в яве больше ничего нет
    это в пхп всякие константы
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 22 июля 2009 г. 17:37, спустя 40 секунд

    krasun, думаю правильнее поля. хотя это все зависит от того как ты переведеш слово field
    Сапожник без сапог
  • krasun

    Сообщения: 1370 Репутация: N Группа: Джедаи

    Spritz 22 июля 2009 г. 17:44, спустя 7 минут 3 секунды

    я книгу Шилдта по C#, когда-то читал, там просто говорилось поля про приватные свойства вот и вспомнил, а так по барабану
  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 22 июля 2009 г. 17:57, спустя 12 минут 18 секунд

    phpdude, слово property ни о чем не говорит?
  • krasun

    Сообщения: 1370 Репутация: N Группа: Джедаи

Пожалуйста, авторизуйтесь, чтобы написать комментарий!