Loading...
scinetic avatar scinetic 40 Точки

Преизползване на конструктори - Как?

Здравейте колеги,

търсих навсякъде полезна информация за това как се преизползва конструктор, но така и не успях да намеря такава, която да ми покаже как точно аджеба става тая работа.. Пиша във форума с надеждата някой да помогне и да ми се изясни тая простотия веднъж завинаги..

public Person(string name, int age, string email)
{
this.Name = name;
this.Age = age;
this.Email = email;
}

public Person(string name, int age)
{

}

 

public Person(string name)
{

}

 

Как може да стане, така че вторият конструктор да преизполва първия и третия да преизползва първия?

 

0
C# OOP Basics
scinetic avatar scinetic 40 Точки

Да, и това го четох, но все още не ми е ясно как става. Например ако се ползва :base(), тогава вика основния конструктор, а като има 3 конструктора, кой е основния, ако само на единия сме сложили :base() ?

0
a.angelov avatar a.angelov 1316 Точки

:base() се ползва в клас наследник. Когато извикваш конструктор в същия клас се ползва :this()

0
mihayloff14 avatar mihayloff14 824 Точки

Конструкторът, който да бъде извикан с base се определя според параметрите, които подаваш на base.

Например, ако имаш конструктор (string name, int age) и конструктор (string name, int age, int number)

base(name, age) ще извика първия, а base(name, age, number) - втория.

Note: Имената на променливите, които подаваш на base не са от значение. Само типа им е от значение.

0
a.angelov avatar a.angelov 1316 Точки
 public Person(string name, int age, string email)
{
this.Name = name;
this.Age = age;
this.Email = email;
}

public Person(string name, int age)
: this(name, age, null)
{

}

public Person(string name)
: this(name, 0, null)
{

}
0
scinetic avatar scinetic 40 Точки

Ето тук се питам защо в третия конструктор трябва да има 0 вместо age?

0
RoYaL avatar RoYaL Trainer 6849 Точки

Защото нямаш age и трябва да подадеш някаква стойност - в случая хардкодваш 0. Ако смяташ, че е удачно може да хардкоднеш и друга стойност. Просто 0 е дефолтната за инт.

0
a.angelov avatar a.angelov 1316 Точки

Защото int не е nullable тип. Ако искаш да му подадеш null трябва да декларираш полето/пропъртито с int? - което вече превръща типа в nullable.

ПС. Обикновено ситуацията е обратната - правиш първо конструктор с най-малкото параметри, а в следващите конструктори добавяш нови параметри - тоест надграждаш го.

0
23/01/2015 19:18:10
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.