Мой вопрос более ёмкий:
"Все вопросы рядового программиста, касаемые программирования, применения языка,
желания иметь большую гибкость или нужный инструментарий при создании своих проектов,
доходят ли до Microsoft, если таковые трудности "применения" возникают не у программистов этой корпорации?"
1. Как говорится: "Хоть ты лопни, хоть ты тресни", но из типов значений ссылочных типов не сделать... Пример:
Если есть конструктор у структуры, то он вызывается как new MyStruct(); НО все равно эта структура будет размещаться в стеке (вроде NEW есть...?) ,
т.е. при передаче такой структуры в метод передается не ссылка на структуру,
а её значение. Возникает вопрос: зачем "NEW", когда тот же "INT"
можно и без "NEW" сделать...
Верно и обратное — ссылочным типом, тот же "Int" не сделаешь...(т.е. не разместишь в куче)
Или же unsafe код писать
Весь этот вопрос конечно пустяки — есть "ref", но "Литературность" хромает...
------------------------------------------------------------------------------------ 2. Почему все поля, методы, свойства не сделать virtual-ными "по умолчанию", что мешает...?
Наследуешь от базового класса что-то —
Захотел — переопределил
Не захотел — пользуйся тем что есть... (см мой предыдущий вопрос про генерацию сообщения "TextChanged") http://www.rsdn.ru/Forum/Message.aspx?mid=2482186&only=1:
__>Базовый класс вызывает СВОЙ защищенный метод "OnTextChanged(new EventArgs())", __>который вызывает сообщение "TextChanged" БАЗОВОГО класса, __>а мне нужно передать сообщение моего класса, __>т.к. я переопределил свойство "Text", а следовательно и сообщение должно быть "ПРАВИЛЬНОЕ": __>с правильным текстом (this.originalText).
И соответственно, сделать какое-то "слово", чтобы нельзя было переопределять... (как sealed)
------------------------------------------------------------------------------------ 3. <- На мой взгляд, самое главное!!!
Привнесли в программирование (по-моему, JAVA-вцы) понятие "СВОЙСТВА",
а обеспечить в C# их достойную поддержку забыли (ну забыли-то, конечно, Microsoft-овцы).
Сейчас, практически, не осталось классов у которых имеются открытые поля —
Везде — СВОЙСТВА!!!
А как передать свойство по ссылке в метод?, чтобы что-то там (в методе),
"подумать" и что-то сделать с этим свойством...
Или передать в блок set другого свойства это же свойство таким же "Макаром".
Ведь как хорошо ассоциировать СВОЙСТВО с обычным ПОЛЕМ, но с полем это возможно, а со свойством — нет
Без этих возможностей принцип "Инкапсуляции" хромает.
т.е: (возможно другими словами, но как придумал...)
Некой функции что-то подается на "ВХОД" а на "ВЫХОДЕ" получаешь нужное значение.
Это хорошо тем, что код функции можно скопировать в другой класс, например,
и функция будет работать (всеравно) правильным образом, т.к. она не зависит от текста,
в котором она написана...
А если функция зависит от текста, в пределах которого она определена?
Тогда возвращаемся к древним временам — к ПРОЦЕДУРНОМУ программированию... Где "дизайн" хромает
(см. ответ AndrewVK "Re[3]: Как внутри СВОЙСТВА изменить входящее значение?" на мой вопрос) http://www.rsdn.ru/Forum/Message.aspx?mid=2480482&only=1
Хорошо, что в C# 2.0 Microsoft-овцы сделали нововведение для свойств:
Теперь можно указывать параметры доступа для set и для get
(protected get{}public set{} — например).
А мне нужно еще и ovverride get{} и new set{} и все это в одном свойстве... (пример после...)
Я думаю кому-то может понадобиться и abstract get{}...
Пример с разными new и override (главное понять, что что-то НЕ ТО,
а пример я просто для "Мыслей" сделал):
public class Form1 : Form
{
private CheckBoxTest checkBoxTest = new CheckBoxTest(); //верхняя "галочка" на формеprivate CheckBox checkBox = new CheckBoxTest(); //нижняя "галочка" на формеpublic Form1()
{
this.Controls.Add(this.checkBoxTest); //верхняя "галочка" на форме
checkBoxTest.Text = "Hello";
this.Controls.Add(this.checkBox); //нижняя "галочка" на формеthis.checkBox.Location = new Point(0, 50);
checkBox.Text = "Hello";
}
class CheckBoxTest : System.Windows.Forms.CheckBox
{
public CheckBoxTest()
{
}
public new string Text //Изменяьть здесь new на override и обратно (ну и "запускать")
{
get { return"Hi"; } //должен быть overrideset { base.Text = "GoodBy"; } //должен быть new
}
}
}
Несколько слов о примере:
Как я понял, свойство "Text" разработчики "CheckBox" унаследовали от "ButtonBase",
Таким образом я переопределяю свойство (если пишу override),
то я переопределяю свойство "Text" типа "ButtonBase".
А разработчики "CheckBox" (и я их за это не виню), просто использовали его в своих целях
(стали "рисовать" его на своем "CheckBox"-е).
А если я преследую цель: "Показывать ("рисовать" т.е.) на CheckBox-е не то,
что желаю хранить в свойстве...",
да и еще иметь надежную "Полиморфию", тогда это у меня не получается!!!!!!!!!
Еще раз напомню: Не получается, потому, что CheckBox использует МОЁ свойство "Text"
для рисования на СВОЁМCheckBox-е (если я пишу override), т.е. использует "МОЙ" блок "get",
а я желаю, что-бы CheckBox рисовал "СВОЙ", а пользователи моего (в данном случае CheckBoxTest),
видели на экрано одно ("base.Text"), а при обращении к свойству получали другое...
т.е. использовали "МОЙ" блок "get"
КОГДА от Microsoft-а ЭТОГО ожидать ?????????
14.05.07 12:03: Перенесено из '.NET'
"Производная функции" — со школы не пойму чё это и в какой момент нужно будет применить... :???:
Re: Общается ли сообщество RSDN напрямую с Microsoft???
От:
Аноним
Дата:
12.05.07 21:52
Оценка:
Здравствуйте, Business,
Из всего написанного Вами в этом и других постах, следует вывод, что вы не понимаете сути объектно-ориентированного программирования и может не только объектно-ориентированного.
Так что я вам советую либо запасаться хорошей литературой либо заняться чем то попроще...
Re: Общается ли сообщество RSDN напрямую с Microsoft???
Здравствуйте, Business, Вы писали:
B>Здраствуйте.
B>Мой вопрос более ёмкий: B>"Все вопросы рядового программиста, касаемые программирования, применения языка, B> желания иметь большую гибкость или нужный инструментарий при создании своих проектов,
Может стоит подумать о Managed С++
Re: Общается ли сообщество RSDN напрямую с Microsoft???
Здравствуйте, Business, Вы писали:
B>Здраствуйте.
B>Мой вопрос более ёмкий: B>"Все вопросы рядового программиста, касаемые программирования, применения языка, B> желания иметь большую гибкость или нужный инструментарий при создании своих проектов, B> доходят ли до Microsoft, если таковые трудности "применения" возникают не у программистов этой корпорации?"
B>Лично мне, всего-навсего при наследовании своего "CheckBoxField" B>от "стандартного" "CheckBox" не хватает ОГРОМНОГО количества "инструментария"... B>(см мои два последних вопроса) B>http://www.rsdn.ru/Forum/Message.aspx?mid=2479403&only=1 B>http://www.rsdn.ru/Forum/Message.aspx?mid=2482186&only=1
Ну это все действительно трудности одного программиста, ну а не языка.
Если вам действительно чего то нехватает в CheckBox'e, то никто не мешает написать свой CheckBox, но уж точно не ждать этого от Microsoft.
B>Сначала вообщем:
B>1. Как говорится: "Хоть ты лопни, хоть ты тресни", но из типов значений ссылочных типов не сделать...
Да, ссылочнм не сделать, но если постараться то даже их можно разместить в куче и работать без боксинга/анбоксинга.
B> Пример: B> Если есть конструктор у структуры, то он вызывается как new MyStruct(); B> НО все равно эта структура будет размещаться в стеке (вроде NEW есть...?) , B> т.е. при передаче такой структуры в метод передается не ссылка на структуру, B> а её значение. Возникает вопрос: зачем "NEW", когда тот же "INT" B> можно и без "NEW" сделать...
Здесь вам нужно понять когда вообще нужно использовать struct а когда class что и в каком случае будет эфективнее.
B> Верно и обратное — ссылочным типом, тот же "Int" не сделаешь...(т.е. не разместишь в куче) B> Или же unsafe код писать B> Весь этот вопрос конечно пустяки — есть "ref", но "Литературность" хромает... B>------------------------------------------------------------------------------------ B>2. Почему все поля, методы, свойства не сделать virtual-ными "по умолчанию", что мешает...?
Тут действительно книжка по ООП должна помочь
И нельзя так сделать еще по тому что вызов виртуального метода происходит несколько медленне чем вызов обычного метода.
Поэтому и придумали слово sealed, чтобы компилятор мог определить где нужны виртуальные вызовы а где нет.
B>------------------------------------------------------------------------------------ B>3. <- На мой взгляд, самое главное!!! B> Привнесли в программирование (по-моему, JAVA-вцы) понятие "СВОЙСТВА", B> а обеспечить в C# их достойную поддержку забыли (ну забыли-то, конечно, Microsoft-овцы).
B> Сейчас, практически, не осталось классов у которых имеются открытые поля - B> Везде — СВОЙСТВА!!!
B> А как передать свойство по ссылке в метод?, чтобы что-то там (в методе), B> "подумать" и что-то сделать с этим свойством...
Да в принципе без проблем можно передать получить делегат на геттер или сеттер и передать, только зачем ...
B> Без этих возможностей принцип "Инкапсуляции" хромает.
См. пункт про ООП книжку
B> т.е: (возможно другими словами, но как придумал...) B> Некой функции что-то подается на "ВХОД" а на "ВЫХОДЕ" получаешь нужное значение. B> Это хорошо тем, что код функции можно скопировать в другой класс, например, B> и функция будет работать (всеравно) правильным образом, т.к. она не зависит от текста, B> в котором она написана... B> А если функция зависит от текста, в пределах которого она определена? B> Тогда возвращаемся к древним временам — к ПРОЦЕДУРНОМУ программированию... Где "дизайн" хромает B> (см. ответ AndrewVK "Re[3]: Как внутри СВОЙСТВА изменить входящее значение?" на мой вопрос) B>http://www.rsdn.ru/Forum/Message.aspx?mid=2480482&only=1
Ну здесь идет не возврат к ПРОЦЕДУРНОМУ программирования, а похоже что вы из него еще не вышли.
Предложенный вами подход по копированию функции обчно используется в Индии и называется Ctrl+C\Ctrl+V.
B> Хорошо, что в C# 2.0 Microsoft-овцы сделали нововведение для свойств: B> Теперь можно указывать параметры доступа для set и для get B> (protected get{}public set{} — например). B> А мне нужно еще и ovverride get{} и new set{} и все это в одном свойстве... (пример после...) B> Я думаю кому-то может понадобиться и abstract get{}...
B> Еще раз напомню: Не получается, потому, что CheckBox использует МОЁ свойство "Text" B> для рисования на СВОЁМCheckBox-е (если я пишу override), т.е. использует "МОЙ" блок "get", B> а я желаю, что-бы CheckBox рисовал "СВОЙ", а пользователи моего (в данном случае CheckBoxTest), B> видели на экрано одно ("base.Text"), а при обращении к свойству получали другое... B> т.е. использовали "МОЙ" блок "get"
Ну не знаю как вы, но я думаю что большинство программистов думаю что свойство text предназначено именно для вывода его на экран, ну а не как
не для хранения своих данных, для этого и сделали свойство Tag.
Re: Общается ли сообщество RSDN напрямую с Microsoft???
Здравствуйте, Business, Вы писали:
B>3. <- На мой взгляд, самое главное!!! B> Привнесли в программирование (по-моему, JAVA-вцы) понятие "СВОЙСТВА", B> а обеспечить в C# их достойную поддержку забыли (ну забыли-то, конечно, Microsoft-овцы).
B> Сейчас, практически, не осталось классов у которых имеются открытые поля - B> Везде — СВОЙСТВА!!!
B> А как передать свойство по ссылке в метод?, чтобы что-то там (в методе), B> "подумать" и что-то сделать с этим свойством... B> Или передать в блок set другого свойства это же свойство таким же "Макаром". B> Ведь как хорошо ассоциировать СВОЙСТВО с обычным ПОЛЕМ, но с полем это возможно, а со свойством — нет
Передать свойство через ref-параметр не получится потому, что ref-параметры внутренне представляются управляемыми указателями на область памяти, а свойство не является областью памяти. Тем не менее, если Вам нужно написать метод, который мог бы "получать" свойства различных объектов и что-то с ними делать, то нужно сделать свойство частью интерфейса.
using System;
interface IText
{
string Text { get; set; }
}
// один класс, поддерживющий свойство Textclass TextBox : IText
{
public string Text
{
get { throw new NotImplementedException(); }
set { throw new NotImplementedException(); }
}
}
// еще один класс, поддерживющий свойство Textclass Label : IText
{
public string Text
{
get { throw new NotImplementedException(); }
set { throw new NotImplementedException(); }
}
}
class Program
{
static void Main()
{
TextBox obj1 = new TextBox();
Label obj2 = new Label();
Foo(obj1);
Foo(obj2);
}
// вот так выглядит метод, "получающий" свойствоstatic voidFoo(IText obj)
{
obj.Text = "Bugaga";
}
}
Интерфейсы — это очень гибкий способ полиморфной работы с разнородными объектами, но если этого для Вас окажется недостаточно, то можно пометить нужные свойства каким-либо атрибутом, и получать доступ к ним через reflection.
Желаю вам УСПЕХОВ!
Re: Общается ли сообщество RSDN напрямую с Microsoft???
B>2. Почему все поля, методы, свойства не сделать virtual-ными "по умолчанию", что мешает...?
Единственное, с чем, пожалуй, согласен.
Но принципиально это не такая уж и проблема.
Новости очень смешные. Зря вы не смотрите. Как будто за наркоманами подсматриваешь. Только тетка с погодой в завязке.
There is no such thing as a winnable war.
Re[2]: Общается ли сообщество RSDN напрямую с Microsoft???
Здравствуйте, nikov, Вы писали:
N>Передать свойство через ref-параметр не получится потому, что ref-параметры внутренне представляются управляемыми указателями на область памяти, а свойство не является областью памяти. Тем не менее, если Вам нужно написать метод, который мог бы "получать" свойства различных объектов и что-то с ними делать, то нужно сделать свойство частью интерфейса.
Если Вы говорите "не получится", только в этой версии C#, то я с вами СОглашусь
т.к. не хватает инструментария...
А если имеете ввиду, то что, вообще нельзя этого сделать, то тут я готов поспорить...
N>Интерфейсы — это очень гибкий способ полиморфной работы с разнородными объектами, но если этого для Вас окажется недостаточно, то можно пометить нужные свойства каким-либо атрибутом, и получать доступ к ним через reflection.
Я считаю: "Зачем находить обходные пути, когда можно один раз проложить трассу".
Я благодарен, за ваши примеры nikov, они мне помогают (необходимы в ЭТОЙ версии C#), но, я думаю, вы согласитесь,
Что "выражение": "Передать свойство по ссылке в метод" <-<- гораздо короче, и следовательно, компактней и "глазу приятней", чем писать дополнительный код обеспечения передачи свойства по ссылке в метод, да и еще и для конкретной ситуации.
Не обижайтесь nikov , но на мой вопрос так никто и не ответил:
"Передаются ли сведения о том, что еще нужно рядовому разработчику для чистого кода и гибкости в Microsoft";
Вот пример, который не только мне мешает(мешал): (заранее говорю, что как его решить — я знаю!!!: пример — ради примера...)
В Visual Studio 2003 когда создавался новый столбец для ListView
то в конструкторе этого столбца ширину "Width" можно было указать, как "-1", для того, чтобы, ширина столбца была равна самой широкой строке в этом столбце, а это не возможно было сделать.
Нужно было, опять-таки, находить обходной путь решения, при этом, ломалась вся "красота" кода.
Т.е. у рядового программиста возникала проблема...
А в Microsoft-e собирают информацию о не только ошибках в их библиотеках, но и о том, какой инструментарий хочет видеть программист? И собирает ли такую информацию с таких же форумов. как RSDN, например, или пользуется только своими сотрудниками? (я где-то слышал что их около 60000чел.)
"Производная функции" — со школы не пойму чё это и в какой момент нужно будет применить... :???:
Re[2]: Общается ли сообщество RSDN напрямую с Microsoft???
Здравствуйте, _d_m_, Вы писали:
___>Здравствуйте, Business, Вы писали:
B>>Здраствуйте.
B>>Мой вопрос более ёмкий: B>>"Все вопросы рядового программиста, касаемые программирования, применения языка, B>> желания иметь большую гибкость или нужный инструментарий при создании своих проектов,
___>Может стоит подумать о Managed С++
Я с него перешел на C#, потому, что там одна "белеберда" пишется (когда код пишешь)
Закорючки, крючечки, такие скобочки, другие скобочки, звездочки.
Сидишь как "шифровальщик", к тому же в C++, так много типов строк (я как-то считал — вроде 7),
что я сразу от туда сбежал...\
На этод код неприятно смотреть, много нужно знать "тонкостей"
А в C# меньше исключений из правил... да и текста нужно писать меньше, как следствие — меньше ошибок
"Производная функции" — со школы не пойму чё это и в какой момент нужно будет применить... :???:
Re[3]: Общается ли сообщество RSDN напрямую с Microsoft???
Здравствуйте, Business, Вы писали:
B>Не обижайтесь nikov , но на мой вопрос так никто и не ответил: B>А в Microsoft-e собирают информацию о не только ошибках в их библиотеках, но и о том, какой инструментарий хочет видеть программист? И собирает ли такую информацию с таких же форумов. как RSDN, например
Что касается этого вопрос: да, возможность эскалировать проблему в Microsoft существует. Я даже делал это пару раз. Но надо иметь в виду, что туда и так поступает достаточно большое количество замечаний и предложений, поэтому проблемы, ценность решения которых сомнительна, да к тому же требующих серьезной перестройки исполняющей среды, вряд ли будут решены за разумное время.
Re[2]: Общается ли сообщество RSDN напрямую с Microsoft???
Здравствуйте, Eugeny__, Вы писали:
B>>2. Почему все поля, методы, свойства не сделать virtual-ными "по умолчанию", что мешает...?
E__>Единственное, с чем, пожалуй, согласен. E__>Но принципиально это не такая уж и проблема.
А зачем?
Re[3]: Общается ли сообщество RSDN напрямую с Microsoft???
Здравствуйте, MaximVK, Вы писали:
MVK>Здравствуйте, Eugeny__, Вы писали:
B>>>2. Почему все поля, методы, свойства не сделать virtual-ными "по умолчанию", что мешает...?
E__>>Единственное, с чем, пожалуй, согласен. E__>>Но принципиально это не такая уж и проблема.
MVK>А зачем?
Я считаю, что "иметь возможность" — драгоценней чем иметь "быструю реализацию"
Даже если вызов бы осуществлялся в 10 раз медленнее...
а моя проблема решалась бы быстрей если бы это было возможно: http://www.rsdn.ru/Forum/Message.aspx?mid=2482186&only=1
Так же я считаю, что время программиста, а так же следовательно и ЦЕНА конечного продукта
дороже, когда долго создаешь программу.
А компьютеры с каждым разом все быстрей...
"Производная функции" — со школы не пойму чё это и в какой момент нужно будет применить... :???:
Re[3]: Общается ли сообщество RSDN напрямую с Microsoft???
Здравствуйте, Business, Вы писали:
B>В Visual Studio 2003 когда создавался новый столбец для ListView B>то в конструкторе этого столбца ширину "Width" можно было указать, как "-1", для того, чтобы, ширина столбца была равна самой широкой строке в этом столбце, а это не возможно было сделать.