Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用IPrintable接口?_C#_List_Interface - Fatal编程技术网

C# 如何使用IPrintable接口?

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

我在IPrintable接口方面遇到了一些问题

我有一个从Person类+studentID和类Person(name,lastname)继承的类Student类。我必须用Print()编写一个IPrintable过程。Print()应该打印Person或Student类的每个字段。接下来,我必须创建4个对象

  • 类对象Person分配给Person类型的变量
  • 指定给Person类型变量的类对象Student
  • 指定给Student类型变量的类对象Student
  • 类对象Student分配给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;
        }
    
    
    }
    
    学生会

    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”)是不合法的。这里涉及到的所有规则背后都有坚实的逻辑,但很多老师遗憾地掩盖了这一点,只关注语法(同时也给学生灌输了太多语法…

    非常感谢。你的回答对我帮助很大。“但是很多老师可悲地掩盖了这一点,只关注语法(同时把太多的语法强加给学生…)”你说得对