@ignat2009
14 лет, изучаю C#

Почему в C# через конструктор можно передать к базовому обьекту производный?

Всем привет и с наступающим! Читаю книгу Герберта Шилдта по с# и мне стал непонятен один момент:
Например, у нас есть два класса один базовый другой производный:
using System;
class People{
public int year{get; private set;}
public string name {get; private set;}

public People(){
year=0;
name="No Name";

}
public People(string n,int y){
name=n;
year=y;
}
public People(People ob){
name=ob.name;
year=ob.year;

}

}

class John:People{
string job;
int money;
string adress;
public  John(): base()
{
job="No job";
money=0;
adress="No adress";
}
public  John(string n, int y, string a, string j, int m) : base(n, y){
job=j;
adress=a;
money=m;
}

public  John(John ob): base(ob){
adress=ob.adress;
job=ob.job;
money=ob.money;
}}
class Program{
static void Main(){
John ob=new John( "John", 34 , "Liverpool", "programmer",150000);
John ob1=new John(ob);
Console.WriteLine("Name: "+ob1.name);
Console.WriteLine("Year: "+ob1.year);
Console.ReadKey(true);
	}
}

Почему в конструкторах обькты которых являются параметрами , не выходит ошибка?
По идее когда в этой строке кодаpublic John(John ob): base(ob)
выполняется операция People ob= Joh ob;
Но это не верно с точки зрения логики,
Почему?
  • Вопрос задан
  • 92 просмотра
Решения вопроса 1
Но это не верно с точки зрения логики,

Почему не верно? Конкретный тип всегда можно привести к базовому.
Джон не человек? Кошка не животное?
Вот наоборот уже нельзя: например нельзя People ob = new object(); - будет ошибка, тк object - слишком абстрактный тип.

PS: чтобы не мучать отвечающего - лучше делай нормальные отступы в коде.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы