C# 如何使用IPrintable接口?
我在IPrintable接口方面遇到了一些问题 我有一个从Person类+studentID和类Person(name,lastname)继承的类Student类。我必须用Print()编写一个IPrintable过程。Print()应该打印Person或Student类的每个字段。接下来,我必须创建4个对象C# 如何使用IPrintable接口?,c#,list,interface,C#,List,Interface,我在IPrintable接口方面遇到了一些问题 我有一个从Person类+studentID和类Person(name,lastname)继承的类Student类。我必须用Print()编写一个IPrintable过程。Print()应该打印Person或Student类的每个字段。接下来,我必须创建4个对象 类对象Person分配给Person类型的变量 指定给Person类型变量的类对象Student 指定给Student类型变量的类对象Student 类对象Student分配给IPrint
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;
}
}
学生会
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);
但是如何使它工作呢?
IPrintable
不是C#中包含的接口;你应该自己做。它将如下所示:
public interface IPrintable {
void Print();
}
因此,您应该通读接口、类实现接口的后果以及多态性(将对象引用分配给更一般类型的变量)
对编辑的回答:正如编译器可能告诉您的那样,Person
必须包含public void Print()
方法,因为该类实现了IPrintable
Student
不一定要有一个,因为它从Person
继承了一个,但是如果你想让Student
以不同的方式打印,你需要用public override void Print()
覆盖那里的方法
事实上,你的最后一段代码正是他们想要的。怎么办?它似乎不起作用了
另外:请仔细阅读我提到的主题。不要只满足于编译器接受
IPrintable x=newstudent(“x”,“x”,2231)代码>,但要理解实际发生的事情(这一行做了三件不同的事情:实例化一个新的学生对象,创建一个新的可打印的变量,然后将该对象分配给该变量),为什么这样做是合法的,做的区别是什么,例如人x=新学生(“x”,“x”,2231)代码>,以及为什么做学生x=新人(“x”,“x”)是不合法的代码>。这里涉及到的所有规则背后都有坚实的逻辑,但很多老师遗憾地掩盖了这一点,只关注语法(同时也给学生灌输了太多语法…非常感谢。你的回答对我帮助很大。“但是很多老师可悲地掩盖了这一点,只关注语法(同时把太多的语法强加给学生…)”你说得对