C#接口、类和抽象类

一个类可以同时继承类和接口,或者抽象类和接口,抽象类和类不能在一个类的继承列表中同时出现。如果子类同时继承类,抽象类和接口,一定要把类或者抽象类写在前面,接口写在后面,类名和接口名之是用“,”隔开,接口没有先后顺序。每一种继承要根据各自的规则去实现。

如果希望学生都具有姓名、性别、年龄和学号等属性,当可以直接在计算机专业的学生类中创建,但是,如果还有别的专业的学生,那么都要重新写一遍,不符合代码重用的原则。现在把公用代码提取出来创建一个父类,在父类中赋予这些属性就可以。由于学号只有学生才有,把学号属性放在学生接口中定义更合理,更有利于扩展。

using System;
public class Person
{
private string name;
private int age;
private string sex;
//定义只读属性
public string Name
{
    get
    {
      return name;
    }
}
public int Age
{
    get
    {
      return age;
    }
}
public string Sex
{
    get
    {
      return sex;
    }
}
public Person(string pname, int page, string psex)
{
    this.name = pname;
    this.age = page;
    this.sex = psex;
}
}

public interface IStudent
{
void StudyBase();
string StudentId
{
    get;
    set;
}
}

public interface IEmployee
{
void Work();
}

public interface IInfoStudent: IStudent
{
void StudySpecial();
}


public class InfoStudent: Person, IEmployee, IInfoStudent
{

private string studentId;
public string StudentId
{
    get
    {
      return studentId;
    }
    set
    {
      studentId = value;
    }
}
public InfoStudent(string sname, int sage, string ssex, string sstudentId):
    base(sname, sage, ssex)
{
    this.studentId = sstudentId;
}

public void StudyBase()
{
    Console.WriteLine("学生必须学习数学、语文和英语");
}

public void Work()
{
    Console.WriteLine("你的工作任务必须要完成");
}

public void StudySpecial()
{
    Console.WriteLine("你是计算机专业学生,必须学习编程");
}
}

class Progarm
{
static void Main()
{
    InfoStudent s = new InfoStudent("刘三彩", 20, "女", "1001");
      Console.WriteLine("你的姓名是" + s.Name + ",你的年龄为" + s.Age +
      ",,岁性别为" + s.Sex + ",学号为" + s.StudentId);
    s.Work();
    s.StudyBase();
    s.StudySpecial();

}
}

注意:在接口中可以定义属性,但不能定义字段,属性只能用get和set名,不能有具体的实现。

展开阅读全文

没有更多推荐了,返回首页