Как сохранить унаследованные свойства от одного класса после преобразования в интерфейсный объект? - PullRequest
0 голосов
/ 07 октября 2018

(Обновление: мое внимание было обращено на то, что метод Quit не должен принимать параметры, и я слишком усложнил его, предполагая, что это необходимо. Я собираюсь настроить его сейчас и посмотреть, работает ли он.)

У меня есть 2 класса, Employee и Person, и интерфейс с именем iQuittable.Сотрудник наследует от Person свойства FirstName и LastName.

Я должен использовать полиморфизм для создания объекта интерфейса IQuittable и вызова для него метода Quit.Поскольку Employee также наследуется от IQuittable, я попытался преобразовать Employee в объект IQuittable.Проблема заключается в том, что после преобразования он больше не имеет доступа к свойствам Person.Метод Quit использует FirstName и LastName от Person, поэтому я попытался поместить эти свойства в файл интерфейса и быстро понял, что это невозможно.

Как я могу преобразовать Employee в IQuittable и при этом сохранить свойства Person?

Примечание. Я изменил параметры метода Quit, чтобы вместо параметра Employee принимать параметры iQuittable, поскольку я использовал полиморфизм для Employee.Это неправильно?Есть места, где «сотрудник» все еще остается нетронутым, потому что я пытался изменить его, и это все равно давало мне ошибки, и я не был уверен, стоит ли его менять.

Я был бы очень признателен, если бы кто-нибудь взглянул на мой код ниже и сказал, что нужно настроить, чтобы Quit можно было вызывать для объекта iQuittable и при этом иметь свойства FirstName и LastName.

**Program file:**

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace interfaces
{
    class Program
    {
        static void Main(string[] args)
        {
            IQuittable NewEmployee = new Employee();

            NewEmployee.FirstName = "Kitty";
            NewEmployee.LastName = "Katz";

            NewEmployee.Quit(NewEmployee);
            Console.ReadLine();
        }
    }
}

**Person file:**

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace interfaces

{
    public abstract class Person
    {
        public string FirstName { get; set; }

        public string LastName { get; set; }
    }
}

**Employee file:**

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace interfaces
{
    class Employee : Person, IQuittable
    {     
        public void Quit(IQuittable Quitter)
        {
            Console.WriteLine(Employee.FirstName + " " + Employee.LastName + " has quit.");
        }
    }
}

**Interface file:**

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace interfaces
{
    interface IQuittable
    {
         void Quit(IQuittable Quitter);
    }
}

1 Ответ

0 голосов
/ 07 октября 2018
class Program
{
    static void Main(string[] args)
    {
        IQuittable NewEmployee = new Employee();

        ((Employee)NewEmployee).FirstName = "Kitty";
        ((Employee)NewEmployee).LastName = "Katz";

        NewEmployee.Quit(NewEmployee);
        Console.ReadLine();
    }
}

interface IQuittable
{
    void Quit(IQuittable Quitter);
}

public abstract class Person
{
    public string FirstName { get; set; }

    public string LastName { get; set; }
}

class Employee : Person, IQuittable
{
    public void Quit(IQuittable Quitter)
    {
        Console.WriteLine(this.FirstName + " " + this.LastName + " has quit.");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...