Правила создания объектов в сишарп?

arhip1985

Client
Регистрация
31.10.2011
Сообщения
2 955
Благодарностей
781
Баллы
113
Подскажите при создании объекта:
Код:
Person p1 = new Person
Person p2 = new Employee
Employee p3 = new Employee
После new мы указываем класс, экземпляром котоого будет объекты p1,2,3. Зачем указывать - Person перед p1,2, и Employee перед p3? что это такое в коде?
в приведённом коде класс Employee это наследник Person.
 
Последнее редактирование:

arhip1985

Client
Регистрация
31.10.2011
Сообщения
2 955
Благодарностей
781
Баллы
113
если я правильно понял, то это тип объекта, но что это такое тип объекта? и как тип объекта у p2 может быть Person, если это экземпляр Employee. изначально, я думал, что это просто правило записи создания нового объекта, т.е. перед названием и после слова new надо указывать Имя класса, и думал, что они должны быть одинаковы. в справочниках и поиске не нашёл ничего по запросу - что определяет тип объекта в сишарп
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113
Подскажите при создании объекта:
Код:
Person p1 = new Person
Person p2 = new Employee
Employee p3 = new Employee
После new мы указываем класс, экземпляром котоого будет объекты p1,2,3. Зачем указывать - Person перед p1,2, и Employee перед p3? что это такое в коде?
в приведённом коде класс Employee это наследник Person.
а кто говорит что надо указывать в начале перед р1 и р3 сам класс
у тебя есть класс
вызов так, если правильно понял
var p1 = new Person();
var p1 = new List<Person>();
 

arhip1985

Client
Регистрация
31.10.2011
Сообщения
2 955
Благодарностей
781
Баллы
113
а кто говорит что надо указывать в начале перед р1 и р3 сам класс
при наследовании и указании разного имени перед именем нового объекта будут разные результаты. я просто не понимаю зачем там вообще указывать имя класса, что это даёт? указали один раз после слова new и этого достаточно, а оказывается надо так
 

amyboose

Client
Регистрация
21.04.2016
Сообщения
2 312
Благодарностей
1 191
Баллы
113
при наследовании и указании разного имени перед именем нового объекта будут разные результаты. я просто не понимаю зачем там вообще указывать имя класса, что это даёт? указали один раз после слова new и этого достаточно, а оказывается надо так
Потому что существует такая вещь, как наследование классов одних типов от других, плюс существует наследованию любого типа от типа object и поэтому мы можем записать так:
Object o = new Empoyee();
Person p = new Empoyee();
Person p1 = new Person();
 
  • Спасибо
Реакции: arhip1985

VerBin

Client
Регистрация
28.05.2016
Сообщения
555
Благодарностей
455
Баллы
63
при наследовании и указании разного имени перед именем нового объекта будут разные результаты. я просто не понимаю зачем там вообще указывать имя класса, что это даёт? указали один раз после слова new и этого достаточно, а оказывается надо так
С# является статически строго типизированным языком. Соответственно все переменные должны заранее иметь тип, кроме переменной с типом dynamic
Вместо четкого определения типа можно использовать ключевое слово var - это лишь синтаксический сахар, который при построении решения все равно определит тип переменной компилятором.
 
  • Спасибо
Реакции: arhip1985

arhip1985

Client
Регистрация
31.10.2011
Сообщения
2 955
Благодарностей
781
Баллы
113
поэтому мы можем записать так:
Person p = new Empoyee();
Person p1 = new Person();
вот в чём отличие между вариантами:
Person p2 = new Employee
Employee p3 = new Employeе
ведь экземпляр одного и того же класса, а тип разный, что определяет этот тип, ведь всё же должно копироваться из того класса, который указан после слова new
 

patlat

Client
Регистрация
21.09.2016
Сообщения
175
Благодарностей
47
Баллы
28
Person p1 - это просто объявленная переменная класса Person, но она пока ещё пустая, вы можете её записать так Person p1 = null;
Person p1 = new Person(); а вот это уже объект

Employee p3 = new Employee - а здесь совсем необязательно писать имя объекта p3.., р1 и р2 это экземпляры одного объекта, а р3 совсем другого
 

amyboose

Client
Регистрация
21.04.2016
Сообщения
2 312
Благодарностей
1 191
Баллы
113
вот в чём отличие между вариантами:
Person p2 = new Employee
Employee p3 = new Employeе
ведь экземпляр одного и того же класса, а тип разный, что определяет этот тип, ведь всё же должно копироваться из того класса, который указан после слова new
Не правильно мыслишь, в моем примере можно привести один тип к другому (boxing) и работать с ними и это называется наследование. Чтобы понять это, тебе надо изучить сначала как можно наследоваться и наследование от типа object. Само по себе наследование позволяет привести нужные типы к к одному и использовать на базе них определенные методы, ну или реализовывать интерфейсы.
 

arhip1985

Client
Регистрация
31.10.2011
Сообщения
2 955
Благодарностей
781
Баллы
113

amyboose

Client
Регистрация
21.04.2016
Сообщения
2 312
Благодарностей
1 191
Баллы
113
как это 1-го, если у р1 - new Person , а р2 - new Employee
Это как класс автомобили и входящий в него класс Рено, Пижо, Форд.
Car car = new Reno();
На базе класса Car ты можешь вызвать определенные стандартные методы для всех классов автомобилей, следовательно для всех типов, наследуемых от класса Car ты можешь вызвать те же методы и поэтому можно сразу все эти типы привести к типу Car и вызвать на базе них метод, присущий всем автомобилям.
 

arhip1985

Client
Регистрация
31.10.2011
Сообщения
2 955
Благодарностей
781
Баллы
113
Не правильно мыслишь, в моем примере можно привести один тип к другому (boxing) и работать с ними и это называется наследование. Чтобы понять это, тебе надо изучить сначала как можно наследоваться и наследование от типа object. Само по себе наследование позволяет привести нужные типы к к одному и использовать на базе них определенные методы, ну или реализовывать интерфейсы.
когда я читаю про наследование в си шарпе, там просто написано, чтобы класс стал наследником надо после объявления класса поставить : и имя класса родителя.
а вот про указание типа при создании объекта ничего не написано
 

amyboose

Client
Регистрация
21.04.2016
Сообщения
2 312
Благодарностей
1 191
Баллы
113
когда я читаю про наследование в си шарпе, там просто написано, чтобы класс стал наследником надо после объявления класса поставить : и имя класса родителя.
а вот про указание типа при создании объекта ничего не написано
почитай выше, я там было дописал текст
 

arhip1985

Client
Регистрация
31.10.2011
Сообщения
2 955
Благодарностей
781
Баллы
113

patlat

Client
Регистрация
21.09.2016
Сообщения
175
Благодарностей
47
Баллы
28
Вам необходима разобраться с двумя понятиями/конструкциями: UpCast и DownCast., и тогда всё встанет на свои места)
 

amyboose

Client
Регистрация
21.04.2016
Сообщения
2 312
Благодарностей
1 191
Баллы
113
ну и в чём будет отличе, если class Reno : Car
и варианты:
Reno car1=new Reno
Car car2=new Reno
а если у тебя тысяча различных автомобилей указано различных марок и ты хочешь вызвать на базе них для каждого объекта типа Reno, Ford, Audi и т.д. определенный метод, присущий всем автомобилям, то как ты поступишь? Будешь создавать и вызывать для каждого объекта отдельный метод?
Я же могу наследоваться от абстрактного класса car, не задавать для этих 1 к объектов такой метод и потом просто взять эти объекты и вызвать на базе них тот метод, который присущ им всем.
 

arhip1985

Client
Регистрация
31.10.2011
Сообщения
2 955
Благодарностей
781
Баллы
113
а если у тебя тысяча различных автомобилей указано различных марок и ты хочешь вызвать на базе них для каждого объекта типа Reno, Ford, Audi и т.д. определенный метод, присущий всем автомобилям, то как ты поступишь? Будешь создавать и вызывать для каждого объекта отдельный метод?
Я же могу наследоваться от абстрактного класса car, не задавать для этих 1 к объектов такой метод и потом просто взять эти объекты и вызвать на базе них тот метод, который присущ им всем.
т.е. когда мы хотим вызвать общий метод, то мы делаем - Car car2=new Reno , а когда нет то Reno car1=new Reno , правильно? или ещё есть правила, для определения типа объекта?
 

VerBin

Client
Регистрация
28.05.2016
Сообщения
555
Благодарностей
455
Баллы
63
Рекомендую ознакомится с концепцией ООП, а именно наследованием, а также с распаковкой и запаковкой обьектов и приведению типов.
 

amyboose

Client
Регистрация
21.04.2016
Сообщения
2 312
Благодарностей
1 191
Баллы
113
Реально это все со временем придет, рано тебе пока думать о наследовании и читать CLR via C#, так как он для тех, кто уже имеет некие представления о написании кода в C#, так что поищи уроки C# для начинающих.
P.S. даже мне не так легко дается понимание этой книги
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 607
Благодарностей
4 598
Баллы
113
  • Спасибо
Реакции: Bot_Sculptor

arhip1985

Client
Регистрация
31.10.2011
Сообщения
2 955
Благодарностей
781
Баллы
113
Рекомендую ознакомится с концепцией ООП, а именно наследованием, а также с распаковкой и запаковкой обьектов и приведению типов.
так вот я и ознакамливаюсь, возник вопрос, решил спросить у знатоков - при каких задачах надо писать Person p2 = new Employee , а в каких Employee p3 = new Employee
или озарение само собой приходит, только объяснить его словами нельзя)
 

Moadip

Client
Регистрация
26.09.2015
Сообщения
509
Благодарностей
823
Баллы
93
  • Спасибо
Реакции: masterLomaster и arhip1985

patlat

Client
Регистрация
21.09.2016
Сообщения
175
Благодарностей
47
Баллы
28
Дело Ваше, но всё же.., я как понимаю вы изучаете шарп для работы в зенке., а приведение к базовому типу используется для сокрытия реализации членов производного класса., просто на сколько целесообразно сейчас вникать в это)
 
  • Спасибо
Реакции: arhip1985

arhip1985

Client
Регистрация
31.10.2011
Сообщения
2 955
Благодарностей
781
Баллы
113
Дело Ваше, но всё же.., я как понимаю вы изучаете шарп для работы в зенке., а приведение к базовому типу используется для сокрытия реализации членов производного класса., просто на сколько целесообразно сейчас вникать в это)
ты реально, кто более толково объяснил
 

arhip1985

Client
Регистрация
31.10.2011
Сообщения
2 955
Благодарностей
781
Баллы
113
Для начинающих, проще уже некуда.
https://www.google.ru/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0ahUKEwjD3ZvPr-HPAhXMO5oKHZBBAaAQFggeMAA&url=http://download.microsoft.com/documents/rus/msdn/c_sharp2.pdf&usg=AFQjCNHX40WSR14QGkz7p8nnEQE2OoWVmA&cad=rja

С конца 54 стр. идет раздел наследование, там в общих чертах описывается что это за хня и зачем нужна.:-)
за книжку спасибо, но такого примера там нет(
 

VerBin

Client
Регистрация
28.05.2016
Сообщения
555
Благодарностей
455
Баллы
63

patlat

Client
Регистрация
21.09.2016
Сообщения
175
Благодарностей
47
Баллы
28
Герберт Шилдт - C# 4.0. Полное руководство
поддерживаю... начинал изучать шарп именно по ней, после этого уже была CLR via C#, сборник учебного курса microsoft и т.д., но Шилдта уважаю больше всего, он у меня как настольный справочник, весь затёрт, весь заклеен скочем, но реально не заменим, вся ясно, всё понятно, легко изложено, без воды...
 

amyboose

Client
Регистрация
21.04.2016
Сообщения
2 312
Благодарностей
1 191
Баллы
113
поддерживаю... начинал изучать шарп именно по ней, после этого уже была CLR via C#, сборник учебного курса microsoft и т.д., но Шилдта уважаю больше всего, он у меня как настольный справочник, весь затёрт, весь заклеен скочем, но реально не заменим, вся ясно, всё понятно, легко изложено, без воды...
Надо бы тоже его почитать совместно с CLR via C#, а то я начинал с видеоуроков от 3 различных авторов и до сих пор в некоторых аспектах есть большие недопонимания.
Он описывает работу с C# только на базовом уровне или сложные аспекты тоже объясняет?
 

patlat

Client
Регистрация
21.09.2016
Сообщения
175
Благодарностей
47
Баллы
28
Он описывает работу с C# только на базовом уровне или сложные аспекты тоже объясняет?
нет, у него описание более углублённое.., базу затрагивает поверхностно., на мой взгляд эта книга для новичка вообще не пригодна., если откровенно, чтоб реально понять эту книгу, необходимо быть уже достаточно опытным кодерам., я себя таким ещё не считаю и поэтому чуть позже обязательно её ещё раз перечитаю)
Это я про CLR via C#
 

patlat

Client
Регистрация
21.09.2016
Сообщения
175
Благодарностей
47
Баллы
28
А Шилдт пишет очень понятно, разжёвано, очень многие говорят, что если учить шарп, то только по Шилдту.
Начинает с самых азов и постепенно, без скачков двигает дальше. После каждой темы, есть пример, который разбирается подробно, что для чего, как называется и как применяется каждый элемент.
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)