我在使用IPrintable接口时遇到了一些问题。
我有类Student类,它继承自Person类+ studentID和类Person(name,lastname)。我必须用Print()程序编写IPrintable。 Print()应打印出Person或Student类中的每个字段。接下来我必须创建4个对象。
接下来,我必须创建IPrintable对象列表,并将所有创建的对象添加到此列表中,并使用Print()方法在循环中打印此对象。
有人可以帮我处理代码或向我展示有关此界面的文章吗?
//编辑
感谢。我仍然对两件事情感到困惑。这是我的代码:
Person.cs
class Person : IPrintable
{
public string FirstName;
public string LastName;
public Person(string FirstName, string LastName)
{
this.FirstName = FirstName;
this.LastName = LastName;
}
public override string ToString()
{
return this.FirstName + " " + this.LastName;
}
}
Student.cs
class Student : Person
{
public int ID;
public Student(string FirstName, string LastName, int ID) : base(FirstName, LastName)
{
this.ID = ID;
}
public override string ToString()
{
return base.ToString() + " [" + this.ID + "]";
}
}
Program.cs的
class Program
{
static void Main(string[] args)
{
Person o = new Student("John", "Smith", 231312);
Console.Write(o.ToString());
return;
}
}
我还有IPrintable.cs
interface IPrintable
{
void Print();
}
我应该在哪里放置Print()函数来从Person和Student类访问它?我不知道如何使“类对象学生分配给IPrintable类型的变量”。
我认为它会像:
IPrintable x = new Student("x", "x", 2231);
但是如何让它发挥作用?
答案 0 :(得分:1)
IPrintable
不是C#中包含的接口;你应该自己做。它看起来像这样:
public interface IPrintable {
void Print();
}
因此,您应该阅读一般的接口,使用类实现接口的结果,以及多态(将对象引用分配给更通用类型的变量)。
回答您的编辑:正如编译器可能告诉您的那样,Person
必须包含public void Print()
方法,因为该类实现了IPrintable
。 Student
不必拥有一个,因为它继承了Person
中的一个,但如果您想要以不同方式打印Student
,则需要覆盖那里的方法,public override void Print()
。
确实,您最后的代码片段是他们要求的。怎么样似乎不起作用?
另外:请仔细阅读我提到的主题。不仅仅是编译器接受IPrintable x = new Student("x", "x", 2231);
而感到满意,而是努力理解实际发生的事情(该单行做了三件事:实例化一个新的Student
对象,创建一个新的IPrintable
变量,然后将对象分配给变量),为什么这样做是合法的,例如,做什么是不同的Person x = new Student("x", "x", 2231);
,以及为什么Student x = new Person("x", "x");
不合法。这里涉及的所有规则背后都有坚实的逻辑,但是很多教师都很遗憾地忽略了这一点并专注于语法(同时在学生身上输入太多语法......)