C# Наследование

290
27 февраля 2017, 10:34

Решал задачу по наследованию на: http://skills.itvdn.com/

Конкретно условие звучит так:

После объявления класса Base создать такой класс Derived, унаследованный от Base, чтобы его field1 по умолчанию имело значение “derived.f1”, а field2 – значение "base.f2".

Казалось бы ничего сложного, всего лишь дописал конструктор и присвоил в нём полям нужные значения.

using System;
namespace Less03_task01
{
    class Program
    {
        static void Main( string[] args )
        {
            Derived inst = new Derived();
            Console.WriteLine("f1 = {0}\tf2 = {1}", inst.field1, inst.field2);
            Console.ReadKey();
        }
    }
    class Base
    {
        public string field1 = "base.f1";
        public string field2 = "base.f2";
    }
    class Derived : Base
    {
        public Derived()
        {
            field1 = "derived.f1";     
            field2 = "base.f2";
        }
    }
}

Но *** та там, задача решена не верно. Залез в подсказки там было написано:

"Или можно перекрыть поле field1 новым полем с таким же именем (используйте ключевое слово new)."

Что это значит и как это использовать в решении задачи?

Answer 1
class Base
{
    public string field1 = "base.f1";
    public string field2 = "base.f2";
}
class Derived : Base
{
    public new string field1 = "derived.f1";
}

Термин «перекрытие» означает, что в производном классе будет присутствовать такой же член, как и в базовом классе, и перекрывать его. Другими словами, в производном классе будет новый, никак не связанный с базовым классом (в отличии от виртуальных) член с совпадающим именем.

var d1 = new Derived(); 
var d2 = (Base) new Derived(); 
Console.WriteLine(d1.field1); // derived.f1
Console.WriteLine(d2.field1); // base.f1

Перекрывать члены базового класса можно и без оператора new но в таком случае компилятор выкинет предупреждение. Другими словами, оператор new просто выключает предупреждение компилятора.

READ ALSO
Many To Many laravel отношения

Many To Many laravel отношения

Имеются 2 таблицыproducts и regions с таким содержимым

296
Как настроить отношения User Model в Laravel 5.4?

Как настроить отношения User Model в Laravel 5.4?

Имеется две моделиUser (получена в результате make:auth) и Ad

285
Не подключается PHP скрипт

Не подключается PHP скрипт

Есть файл Functionsphp, в нем прописаны строки:

227
форматер для php [требует правки]

форматер для php [требует правки]

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

242