char.IsDigit - зачем static?
От: Кос todosoft.org
Дата: 12.02.07 05:31
Оценка:
В классе char есть, статический метод bool IsDigit(char).

Статический метод с объектом того же класса в параметрах выглядит довольно странно.
Вот и возник вопрос, из каких соображений сделали не свойство, а статический метод?
По некоторым данным, в Java тоже самое.
Re: char.IsDigit - зачем static?
От: Bone_nsk  
Дата: 12.02.07 06:13
Оценка:
Здравствуйте, Кос, Вы писали:

Кос>В классе char есть, статический метод bool IsDigit(char).


Кос>Статический метод с объектом того же класса в параметрах выглядит довольно странно.

Кос>Вот и возник вопрос, из каких соображений сделали не свойство, а статический метод?
Кос>По некоторым данным, в Java тоже самое.

В Java Character.isDigit(char) принимает в параметрах примитивный тип, поэтому он и статический. Скорее всего в C# что-то подобное.
Re[2]: char.IsDigit - зачем static?
От: Pavel M. Россия  
Дата: 12.02.07 07:50
Оценка:
Здравствуйте, Bone_nsk, Вы писали:

B_>Здравствуйте, Кос, Вы писали:


Кос>>В классе char есть, статический метод bool IsDigit(char).


Кос>>Статический метод с объектом того же класса в параметрах выглядит довольно странно.

Кос>>Вот и возник вопрос, из каких соображений сделали не свойство, а статический метод?
Кос>>По некоторым данным, в Java тоже самое.

B_>В Java Character.isDigit(char) принимает в параметрах примитивный тип, поэтому он и статический. Скорее всего в C# что-то подобное.


не понятна связь =))))) поясните
--------------------------
less think — do more
Re[3]: char.IsDigit - зачем static?
От: Bone_nsk  
Дата: 12.02.07 08:21
Оценка: +1
Здравствуйте, Pavel M., Вы писали:

Кос>>>Вот и возник вопрос, из каких соображений сделали не свойство, а статический метод?


B_>>В Java Character.isDigit(char) принимает в параметрах примитивный тип, поэтому он и статический. Скорее всего в C# что-то подобное.


PM> не понятна связь =))))) поясните


Примитивный тип не является классом, у него нет свойств и методов.
Что бы узнать, является ли символ цифрой не поможет ни свойство класса, ни его non-static метод.
Поэтому метод статический и принимает примитивный тип, в который при необходимости развернется объект класса.
Re[4]: char.IsDigit - зачем static?
От: Pavel M. Россия  
Дата: 12.02.07 08:26
Оценка:
Здравствуйте, Bone_nsk, Вы писали:

B_>Здравствуйте, Pavel M., Вы писали:


Кос>>>>Вот и возник вопрос, из каких соображений сделали не свойство, а статический метод?


B_>>>В Java Character.isDigit(char) принимает в параметрах примитивный тип, поэтому он и статический. Скорее всего в C# что-то подобное.


PM>> не понятна связь =))))) поясните


B_>Примитивный тип не является классом, у него нет свойств и методов.

B_>Что бы узнать, является ли символ цифрой не поможет ни свойство класса, ни его non-static метод.
B_>Поэтому метод статический и принимает примитивный тип, в который при необходимости развернется объект класса.

аааа, если так только. просто выражена мысль так, что получается что-то вроде "методы, принимающие примитивные типы, д.б. статическими " =) вот я и не понял
--------------------------
less think — do more
Re[4]: char.IsDigit - зачем static?
От: _FRED_ Черногория
Дата: 12.02.07 08:31
Оценка:
Здравствуйте, Bone_nsk, Вы писали:

Кос>>>>Вот и возник вопрос, из каких соображений сделали не свойство, а статический метод?

B_>>>В Java Character.isDigit(char) принимает в параметрах примитивный тип, поэтому он и статический. Скорее всего в C# что-то подобное.
PM>> не понятна связь =))))) поясните

B_>Примитивный тип не является классом, у него нет свойств и методов.


Примитивный тип описывается структурой, которая может иметь и свойства и методы.
... << RSDN@Home 1.2.0 alpha rev. 670>>
Now playing: «Тихо в лесу…»
Help will always be given at Hogwarts to those who ask for it.
Re: char.IsDigit - зачем static?
От: _FRED_ Черногория
Дата: 12.02.07 08:31
Оценка: 12 (1) +1
Здравствуйте, Кос, Вы писали:

Кос>В классе char есть, статический метод bool IsDigit(char).

Кос>Статический метод с объектом того же класса в параметрах выглядит довольно странно.
Кос>Вот и возник вопрос, из каких соображений сделали не свойство, а статический метод?
Кос>По некоторым данным, в Java тоже самое.

Часто удобно наличие именно подобных статических предикатов. Ведь
public static bool IsDigit(char c);
public static bool IsControl(char c);
public static bool IsLetter(char c);
…

Представляют из себя
public delegate bool Predicate<T>(T obj);

с T == char, а, значит, их можно использовать так:
List<char> chars = new List<char>(new char[] { 'a', '1', 'b', '2', 'c', '3', 'd', '4' });
List<char> digits = chars.FindAll(Char.IsDigit);

Но, вообще, если внимательно присмотреться к методу IsDigit, обнаружим вот такую сигнатуру:
public static bool IsDigit(string s, int index);

Куда его добавлять? Оставлять статическим в типе сhar? Или переносить в тип string?
... << RSDN@Home 1.2.0 alpha rev. 670>>
Now playing: «Тихо в лесу…»
Help will always be given at Hogwarts to those who ask for it.
Re[2]: char.IsDigit - зачем static?
От: Кос todosoft.org
Дата: 12.02.07 09:19
Оценка: +2
Здравствуйте, _FRED_, Вы писали:

_FR>Здравствуйте, Кос, Вы писали:


_FR>Часто удобно наличие именно подобных статических предикатов. Ведь

_FR>
_FR>public static bool IsDigit(char c);
_FR>public static bool IsControl(char c);
_FR>public static bool IsLetter(char c);
_FR>…
_FR>

_FR>Представляют из себя
_FR>
_FR>public delegate bool Predicate<T>(T obj);
_FR>

Я не осознал удобства, если честно
Но в любом случае ничего не мешает сделать нестатическое свойство, которе в частности могло бы и статический метод вызывать , если без него никак.
Но использование было бы более интуитивно, ближе к ООП. Ведь намного понятнее
if(symbol.IsDigit)
{
...
}




_FR>Но, вообще, если внимательно присмотреться к методу IsDigit, обнаружим вот такую сигнатуру:

_FR>
_FR>public static bool IsDigit(string s, int index);
_FR>

_FR>Куда его добавлять? Оставлять статическим в типе сhar? Или переносить в тип string?

Хватет одного, и опять же, не скатываясь к процедурному программированию:
if(Text[5].IsDigit)
{
...
}
Re[5]: char.IsDigit - зачем static?
От: Pavel M. Россия  
Дата: 12.02.07 09:29
Оценка:
Здравствуйте, _FRED_, Вы писали:

_FR>Здравствуйте, Bone_nsk, Вы писали:



B_>>Примитивный тип не является классом, у него нет свойств и методов.


_FR>Примитивный тип описывается структурой, которая может иметь и свойства и методы.


мы говорим о яве, а там другая песня )
--------------------------
less think — do more
Re[3]: char.IsDigit - зачем static?
От: Аноним  
Дата: 13.02.07 08:40
Оценка: -5 :))) :))
Здравствуйте, Кос, Вы писали:

Кос>Здравствуйте, _FRED_, Вы писали:


_FR>>Здравствуйте, Кос, Вы писали:


_FR>>Часто удобно наличие именно подобных статических предикатов. Ведь

_FR>>
_FR>>public static bool IsDigit(char c);
_FR>>public static bool IsControl(char c);
_FR>>public static bool IsLetter(char c);
_FR>>…
_FR>>

_FR>>Представляют из себя
_FR>>
_FR>>public delegate bool Predicate<T>(T obj);
_FR>>

Кос>Я не осознал удобства, если честно
Кос>Но в любом случае ничего не мешает сделать нестатическое свойство, которе в частности могло бы и статический метод вызывать , если без него никак.
Кос>Но использование было бы более интуитивно, ближе к ООП. Ведь намного понятнее
Кос>
Кос>if(symbol.IsDigit)
Кос>{
Кос>...
Кос>}
Кос>




_FR>>Но, вообще, если внимательно присмотреться к методу IsDigit, обнаружим вот такую сигнатуру:

_FR>>
_FR>>public static bool IsDigit(string s, int index);
_FR>>

_FR>>Куда его добавлять? Оставлять статическим в типе сhar? Или переносить в тип string?

Кос>Хватет одного, и опять же, не скатываясь к процедурному программированию:

Кос>
Кос>if(Text[5].IsDigit)
Кос>{
Кос>...
Кос>}
Кос>


Поправте меня если я ошибаюсь Что если у тебя в программе 1000 char-обьектов, и каждый такой обьект имеет НЕ статическое свойство, которое можно вызывать очень красиво и интуитивно как ты и написал(см. выше). Тогда ответом на вопрос, почему выбрали именно статический метод, может быть такой ответ: нафига 1000 раз держать в памяти один и тот-же код для каждого char-обьекта, если можно обойтись одним static-методом?!
Re[4]: char.IsDigit - зачем static?
От: Аноним  
Дата: 13.02.07 08:45
Оценка: -4 :)))
Здравствуйте, Аноним, Вы писали:

А>Тогда ответом на вопрос, почему выбрали именно статический метод, может быть такой ответ: нафига 1000 раз держать в памяти один и тот-же код для каждого char-обьекта, если можно обойтись одним static-методом?!


Ну наконец-то до людей дошло. Зачем вообще было поднимать такой элементарный вопрос...
Re[4]: char.IsDigit - зачем static?
От: _FRED_ Черногория
Дата: 13.02.07 08:53
Оценка: +1
Здравствуйте, <Аноним>, Вы писали:

А> Поправте меня если я ошибаюсь


Во первых, оверквотинг уже сам по себе является ошибкой.

А>Что если у тебя в программе 1000 char-обьектов, и каждый такой обьект имеет НЕ статическое свойство, которое можно вызывать очень красиво и интуитивно как ты и написал(см. выше). Тогда ответом на вопрос, почему выбрали именно статический метод, может быть такой ответ: нафига 1000 раз держать в памяти один и тот-же код для каждого char-обьекта, если можно обойтись одним static-методом?!


Данное предположение так же не верно. Размер "кода для каждого char-обьекта" не зависит от наличия в типе char не статических свойств.

Или что ты понимаешь под "код для каждого char-обьекта"?
... << RSDN@Home 1.2.0 alpha rev. 670>>
Now playing: «Тихо в лесу…»
Help will always be given at Hogwarts to those who ask for it.
Re[5]: char.IsDigit - зачем static?
От: Аноним  
Дата: 13.02.07 09:03
Оценка: :))
Здравствуйте, _FRED_, Вы писали:

_FR>Здравствуйте, <Аноним>, Вы писали:


А>> Поправте меня если я ошибаюсь


_FR>Во первых, оверквотинг уже сам по себе является ошибкой.


Это да

А>>Что если у тебя в программе 1000 char-обьектов, и каждый такой обьект имеет НЕ статическое свойство, которое можно вызывать очень красиво и интуитивно как ты и написал(см. выше). Тогда ответом на вопрос, почему выбрали именно статический метод, может быть такой ответ: нафига 1000 раз держать в памяти один и тот-же код для каждого char-обьекта, если можно обойтись одним static-методом?!


_FR>Данное предположение так же не верно. Размер "кода для каждого char-обьекта" не зависит от наличия в типе char не статических свойств.


_FR>Или что ты понимаешь под "код для каждого char-обьекта"?


Ты имеешь в виду, что коды методов для всех экземпляров класса хранятся в памяти в единственном экземпляре. А обьекты одного класса отличаются ТОЛЬКО содержимым полей ?
Re[6]: char.IsDigit - зачем static?
От: _FRED_ Черногория
Дата: 13.02.07 09:08
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А> Ты имеешь в виду, что коды методов для всех экземпляров класса хранятся в памяти в единственном экземпляре. А обьекты одного класса отличаются ТОЛЬКО содержимым полей ?


Именно.
... << RSDN@Home 1.2.0 alpha rev. 670>>
Now playing: «Тихо в лесу…»
Help will always be given at Hogwarts to those who ask for it.
Re[6]: char.IsDigit - зачем static?
От: _d_m_  
Дата: 13.02.07 09:10
Оценка: :)
Здравствуйте, Аноним, Вы писали:

_FR>>Данное предположение так же не верно. Размер "кода для каждого char-обьекта" не зависит от наличия в типе char не статических свойств.


_FR>>Или что ты понимаешь под "код для каждого char-обьекта"?


А> Ты имеешь в виду, что коды методов для всех экземпляров класса хранятся в памяти в единственном экземпляре. А обьекты одного класса отличаются ТОЛЬКО содержимым полей ?


Ты хочешь сказать, что ничего не знаешь про скрытый параметр нестатических методов this ?
Re: char.IsDigit - зачем static?
От: Алексей.  
Дата: 13.02.07 10:08
Оценка: -2
Здравствуйте, Кос, Вы писали:

Кос>В классе char есть, статический метод bool IsDigit(char).

Кос>Вот и возник вопрос, из каких соображений сделали не свойство, а статический метод?

Чтобы боксинга не было. Функции есть только у объектов.
Re[2]: char.IsDigit - зачем static?
От: _FRED_ Черногория
Дата: 13.02.07 10:20
Оценка:
Здравствуйте, Алексей., Вы писали:

Кос>>В классе char есть, статический метод bool IsDigit(char).

Кос>>Вот и возник вопрос, из каких соображений сделали не свойство, а статический метод?

А>Чтобы боксинга не было. Функции есть только у объектов.


А как же методы и свойства структуры Rectangle
... << RSDN@Home 1.2.0 alpha rev. 675>>
Now playing: «Тихо в лесу…»
Help will always be given at Hogwarts to those who ask for it.
Re[7]: char.IsDigit - зачем static?
От: Аноним  
Дата: 13.02.07 11:21
Оценка:
Здравствуйте, _d_m_, Вы писали:

___>Здравствуйте, Аноним, Вы писали:


_FR>>>Данное предположение так же не верно. Размер "кода для каждого char-обьекта" не зависит от наличия в типе char не статических свойств.


_FR>>>Или что ты понимаешь под "код для каждого char-обьекта"?


А>> Ты имеешь в виду, что коды методов для всех экземпляров класса хранятся в памяти в единственном экземпляре. А обьекты одного класса отличаются ТОЛЬКО содержимым полей ?


___>Ты хочешь сказать, что ничего не знаешь про скрытый параметр нестатических методов this ?


Не понял вопроса this — ссылка на вызывающий обьект(в смысле ссылка на обьект для которого вызывается метод). И почему this — скрытый параметр нестатических методов ?
Re[3]: char.IsDigit - зачем static?
От: dshe  
Дата: 13.02.07 13:09
Оценка: -1
Здравствуйте, Кос, Вы писали:

Кос>Я не осознал удобства, если честно

Кос>Но в любом случае ничего не мешает сделать нестатическое свойство, которе в частности могло бы и статический метод вызывать , если без него никак.
Кос>Но использование было бы более интуитивно, ближе к ООП.
Кос>Хватет одного, и опять же, не скатываясь к процедурному программированию:

Судя по твоим словам существенное различие между ООП и процедурным программированием заключается в том, куда вписывать получателя сообщения: перед именем метода (ch.IsDigit()) или после него (IsDigit(ch)).
--
Дмитро
Re[8]: char.IsDigit - зачем static?
От: fmiracle  
Дата: 13.02.07 16:57
Оценка:
Здравствуйте, Аноним, Вы писали:

А> Не понял вопроса this — ссылка на вызывающий обьект(в смысле ссылка на обьект для которого вызывается метод). И почему this — скрытый параметр нестатических методов ?


Потому что код:


class MyClass
{
    int field = 1;
    public int Method()
    {
       return field^2;
    }
}
MyClass m = new MyClass();
m.Method();


условно соответствует такому в не-объектно ориентированном языке:


struct MyClass
{
    public int field = 1;
}

int Method( MyClass thisPointer )
{
   return thisPointer.field^2;
}

My m = new My();
Method( m );


как видишь — количество кода никак не зависит от числа инстансов объекта.
Re[8]: char.IsDigit - зачем static?
От: _d_m_  
Дата: 14.02.07 02:40
Оценка:
Здравствуйте, Аноним, Вы писали:

___>>Ты хочешь сказать, что ничего не знаешь про скрытый параметр нестатических методов this ?


А> Не понял вопроса this — ссылка на вызывающий обьект(в смысле ссылка на обьект для которого вызывается метод). И почему this — скрытый параметр нестатических методов ?


А откуда берется по твоему эта "ссылка на вызывающий объект" в методах? Передается параметром метода.
Re[5]: char.IsDigit - зачем static?
От: Кос todosoft.org
Дата: 14.02.07 04:39
Оценка:
Такой ответ можно было публиковать только под "Анонимом". Стыдно должно быть
Вы что действительно полагали что для каждого объекта отдельно хранится выполняемый код???
А разделение кода и данных много лет назад придумали для чего???
А тот же GetType() который есть у каждого???

Нет, если честно, я в шоке.
Re[9]: char.IsDigit - зачем static?
От: Аноним  
Дата: 14.02.07 09:10
Оценка:
Здравствуйте, _d_m_, Вы писали:

___>А откуда берется по твоему эта "ссылка на вызывающий объект" в методах? Передается параметром метода.


Упоминание об этом где-то было. Но толком механизма я не знаю. Чего-бы на эту тему почитать
Re[10]: char.IsDigit - зачем static?
От: Кос todosoft.org
Дата: 14.02.07 09:17
Оценка:
Чего-бы на эту тему почитать
Бьерн Страуступ
Re[11]: char.IsDigit - зачем static?
От: Аноним  
Дата: 14.02.07 09:27
Оценка:
Здравствуйте, Кос, Вы писали:

Кос>Чего-бы на эту тему почитать

Кос>Бьерн Страуступ

Ты имеешь ввиду "Язык программирования C++" ? Или Страуструп что-то по C# писал
Re[12]: char.IsDigit - зачем static?
От: Кос todosoft.org
Дата: 14.02.07 09:31
Оценка: -1 :)
Здравствуйте, Аноним, Вы писали:

Кос>>Чего-бы на эту тему почитать

Кос>>Бьерн Страуступ

А> Ты имеешь ввиду "Язык программирования C++" ? Или Страуструп что-то по C# писал


C++ — один из прародителей ОО языков.
Основы, надо знать. Обязательно. И эта ветка, тому неоспоримое доказательство.
Re[13]: char.IsDigit - зачем static?
От: Аноним  
Дата: 14.02.07 09:52
Оценка:
Здравствуйте, Кос, Вы писали:

Кос>C++ — один из прародителей ОО языков.

Кос>Основы, надо знать. Обязательно. И эта ветка, тому неоспоримое доказательство.

У меня Страуструп есть. А где там про виртуальную память написано
Re[13]: char.IsDigit - зачем static?
От: Аноним  
Дата: 14.02.07 09:57
Оценка:
Здравствуйте, Кос, Вы писали:

Кос>C++ — один из прародителей ОО языков.

Кос>Основы, надо знать. Обязательно. И эта ветка, тому неоспоримое доказательство.

Упс!!! Ветки перепутал Я имел ввиду где почитать про всякие 'неявные' процессы в C# ?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.