多态转换为接口对象后,如何保留一个类的继承属性?

时间:2018-10-06 21:08:41

标签: c# inheritance interface

(更新:已经引起了我的注意,Quit方法不需要参数,并且我假设必须这样做而使它过于复杂。我现在要对其进行调整,看看是否可行。 )

我有2个类,Employee和Person,以及一个称为iQuittable的接口。 Employee从Person继承FirstName和LastName的属性。

我应该使用多态来创建接口对象IQuittable并在其上调用Quit方法。由于Employee也继承自IQuittable,因此我尝试将Employee变形为IQuittable对象。问题在于,一旦变形,就无法再访问Person属性。 Quit方法涉及Person中的FirstName和LastName,因此我尝试将这些属性放入接口文件中,并很快意识到这是不可能的。

如何将Employee转换为IQuittable并且仍然保留Person的属性?

注意:因为我对Employee使用了多态性,所以我将Quit方法的参数更改为采用iQuittable参数而不是Employee。错了吗在某些地方,“雇员”仍然完好无损,因为我尝试更改它,但它仍然给我带来错误,我不确定是否应该更改它。

如果有人可以看一下下面的代码并告诉我应该进行哪些调整,以便可以在iQuittable对象上调用Quit并仍然具有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 :(得分:2)

Vertex: TPoint;
Val: TValue;

...

Vertex := Point(1, 22);
TValue.Make(@Vertex, TypeInfo(TPoint), Val);
Prop.SetValue(Self, Val);