В классе char есть, статический метод bool IsDigit(char).
Статический метод с объектом того же класса в параметрах выглядит довольно странно.
Вот и возник вопрос, из каких соображений сделали не свойство, а статический метод?
По некоторым данным, в Java тоже самое.
Здравствуйте, Кос, Вы писали:
Кос>В классе char есть, статический метод bool IsDigit(char).
Кос>Статический метод с объектом того же класса в параметрах выглядит довольно странно. Кос>Вот и возник вопрос, из каких соображений сделали не свойство, а статический метод? Кос>По некоторым данным, в Java тоже самое.
В Java Character.isDigit(char) принимает в параметрах примитивный тип, поэтому он и статический. Скорее всего в C# что-то подобное.
Здравствуйте, Bone_nsk, Вы писали:
B_>Здравствуйте, Кос, Вы писали:
Кос>>В классе char есть, статический метод bool IsDigit(char).
Кос>>Статический метод с объектом того же класса в параметрах выглядит довольно странно. Кос>>Вот и возник вопрос, из каких соображений сделали не свойство, а статический метод? Кос>>По некоторым данным, в Java тоже самое.
B_>В Java Character.isDigit(char) принимает в параметрах примитивный тип, поэтому он и статический. Скорее всего в C# что-то подобное.
Здравствуйте, Pavel M., Вы писали:
Кос>>>Вот и возник вопрос, из каких соображений сделали не свойство, а статический метод?
B_>>В Java Character.isDigit(char) принимает в параметрах примитивный тип, поэтому он и статический. Скорее всего в C# что-то подобное.
PM> не понятна связь =))))) поясните
Примитивный тип не является классом, у него нет свойств и методов.
Что бы узнать, является ли символ цифрой не поможет ни свойство класса, ни его non-static метод.
Поэтому метод статический и принимает примитивный тип, в который при необходимости развернется объект класса.
Здравствуйте, Bone_nsk, Вы писали:
B_>Здравствуйте, Pavel M., Вы писали:
Кос>>>>Вот и возник вопрос, из каких соображений сделали не свойство, а статический метод?
B_>>>В Java Character.isDigit(char) принимает в параметрах примитивный тип, поэтому он и статический. Скорее всего в C# что-то подобное.
PM>> не понятна связь =))))) поясните
B_>Примитивный тип не является классом, у него нет свойств и методов. B_>Что бы узнать, является ли символ цифрой не поможет ни свойство класса, ни его non-static метод. B_>Поэтому метод статический и принимает примитивный тип, в который при необходимости развернется объект класса.
аааа, если так только. просто выражена мысль так, что получается что-то вроде "методы, принимающие примитивные типы, д.б. статическими " =) вот я и не понял
Здравствуйте, 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.
Здравствуйте, Кос, Вы писали:
Кос>В классе 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, а, значит, их можно использовать так:
Я не осознал удобства, если честно
Но в любом случае ничего не мешает сделать нестатическое свойство, которе в частности могло бы и статический метод вызывать , если без него никак.
Но использование было бы более интуитивно, ближе к ООП. Ведь намного понятнее
if(symbol.IsDigit)
{
...
}
_FR>Но, вообще, если внимательно присмотреться к методу IsDigit, обнаружим вот такую сигнатуру: _FR>
_FR>public static bool IsDigit(string s, int index);
_FR>
_FR>Куда его добавлять? Оставлять статическим в типе сhar? Или переносить в тип string?
Хватет одного, и опять же, не скатываясь к процедурному программированию:
Здравствуйте, _FRED_, Вы писали:
_FR>Здравствуйте, Bone_nsk, Вы писали:
B_>>Примитивный тип не является классом, у него нет свойств и методов.
_FR>Примитивный тип описывается структурой, которая может иметь и свойства и методы.
Здравствуйте, Кос, Вы писали:
Кос>Здравствуйте, _FRED_, Вы писали:
_FR>>Здравствуйте, Кос, Вы писали:
_FR>>Часто удобно наличие именно подобных статических предикатов. Ведь _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-методом?!
Здравствуйте, Аноним, Вы писали:
А>Тогда ответом на вопрос, почему выбрали именно статический метод, может быть такой ответ: нафига 1000 раз держать в памяти один и тот-же код для каждого char-обьекта, если можно обойтись одним static-методом?!
Ну наконец-то до людей дошло. Зачем вообще было поднимать такой элементарный вопрос...
Здравствуйте, <Аноним>, Вы писали:
А> Поправте меня если я ошибаюсь
Во первых, оверквотинг уже сам по себе является ошибкой.
А>Что если у тебя в программе 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-обьекта"?
Ты имеешь в виду, что коды методов для всех экземпляров класса хранятся в памяти в единственном экземпляре. А обьекты одного класса отличаются ТОЛЬКО содержимым полей ?
Здравствуйте, <Аноним>, Вы писали:
А> Ты имеешь в виду, что коды методов для всех экземпляров класса хранятся в памяти в единственном экземпляре. А обьекты одного класса отличаются ТОЛЬКО содержимым полей ?
Именно.
... << RSDN@Home 1.2.0 alpha rev. 670>>
Now playing: «Тихо в лесу…»
Help will always be given at Hogwarts to those who ask for it.
Здравствуйте, Аноним, Вы писали:
_FR>>Данное предположение так же не верно. Размер "кода для каждого char-обьекта" не зависит от наличия в типе char не статических свойств.
_FR>>Или что ты понимаешь под "код для каждого char-обьекта"?
А> Ты имеешь в виду, что коды методов для всех экземпляров класса хранятся в памяти в единственном экземпляре. А обьекты одного класса отличаются ТОЛЬКО содержимым полей ?
Ты хочешь сказать, что ничего не знаешь про скрытый параметр нестатических методов this ?
Здравствуйте, Кос, Вы писали:
Кос>В классе char есть, статический метод bool IsDigit(char). Кос>Вот и возник вопрос, из каких соображений сделали не свойство, а статический метод?
Чтобы боксинга не было. Функции есть только у объектов.
Здравствуйте, Алексей., Вы писали:
Кос>>В классе char есть, статический метод bool IsDigit(char). Кос>>Вот и возник вопрос, из каких соображений сделали не свойство, а статический метод?
А>Чтобы боксинга не было. Функции есть только у объектов.
... << 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 — скрытый параметр нестатических методов ?
Здравствуйте, Кос, Вы писали:
Кос>Я не осознал удобства, если честно Кос>Но в любом случае ничего не мешает сделать нестатическое свойство, которе в частности могло бы и статический метод вызывать , если без него никак. Кос>Но использование было бы более интуитивно, ближе к ООП. Кос>Хватет одного, и опять же, не скатываясь к процедурному программированию:
Судя по твоим словам существенное различие между ООП и процедурным программированием заключается в том, куда вписывать получателя сообщения: перед именем метода (ch.IsDigit()) или после него (IsDigit(ch)).
Здравствуйте, Аноним, Вы писали:
А> Не понял вопроса 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 );
как видишь — количество кода никак не зависит от числа инстансов объекта.
Здравствуйте, Аноним, Вы писали:
___>>Ты хочешь сказать, что ничего не знаешь про скрытый параметр нестатических методов this ?
А> Не понял вопроса this — ссылка на вызывающий обьект(в смысле ссылка на обьект для которого вызывается метод). И почему this — скрытый параметр нестатических методов ?
А откуда берется по твоему эта "ссылка на вызывающий объект" в методах? Передается параметром метода.
Такой ответ можно было публиковать только под "Анонимом". Стыдно должно быть
Вы что действительно полагали что для каждого объекта отдельно хранится выполняемый код???
А разделение кода и данных много лет назад придумали для чего???
А тот же GetType() который есть у каждого???
Нет, если честно, я в шоке.
Re[9]: char.IsDigit - зачем static?
От:
Аноним
Дата:
14.02.07 09:10
Оценка:
Здравствуйте, _d_m_, Вы писали:
___>А откуда берется по твоему эта "ссылка на вызывающий объект" в методах? Передается параметром метода.
Упоминание об этом где-то было. Но толком механизма я не знаю. Чего-бы на эту тему почитать
Здравствуйте, Аноним, Вы писали:
Кос>>Чего-бы на эту тему почитать Кос>>Бьерн Страуступ
А> Ты имеешь ввиду "Язык программирования 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# ?