C#继承多态

这篇博客详细介绍了C#中的继承和多态概念。通过代码示例展示了继承如何让子类具备父类的属性和方法,多态则允许同一操作在不同对象上有不同解释和执行效果。此外,还讨论了抽象类与接口的异同,以及抽象方法和虚方法的区别。同时提到了XML和文件操作的相关方法。
摘要由CSDN通过智能技术生成

01:什么是继承?代码举例说明。

就是子类继承父类,使子类具有父类的各种属性和方法。

//父类
public class student{
        public int id { get; set; }
        public string name { get; set; }
        public Student(int id, string name)
        {
            this.id = id;
            this.name = name;
        }
        public Student()
        {

        }
}
//子类
public class School : Student
    {
        public string  SchoolName { get; set; }
        public School()
        {

        }
        public School(int id, string name,string SchoolName)
        {
            this.id = id;
            this.name = name;
            this.SchoolName = SchoolName;
        }
    }

02:什么是多态?代码举例说明。

指同一操作作用与不同的对象时,可以有不同的解释,产生不同的执行效果。

public class Student
    {
       public virtual string Show()
        {
            string message = string.Format("大家好!");
            return message;
        }       
    }
public class School : Student
    {
        public override string Show()
        {
            string message = string.Format("大家好!,我是代码");
            return message;
        }
    }

03:什么是抽象类?代码举例说明。

包含了无法实现的成员的类就是抽象类。

public class Employee
    {
        public Employee() {

        }
        public Employee(string id, int age, string name, Gender gender)
        {
            this.ID = id;
            this.Age = age;
            this.Name = name;
            this.Gender = gender;
        }
        /// <summary>
        /// 工号
        /// </summary>
        protected string ID { get; set; }
        /// <summary>
        /// 年龄
        /// </summary>
        protected int Age { get; set; }
        /// <summary>
        /// 姓名
        /// </summary>
        protected string Name { get; set; }
        /// <summary>
        /// 性别
        /// </summary>
        protected Gender Gender { get; set; }
        public virtual string SayHi() 
        {
            string message = string.Format("大家好!");
            return message;
        }
        public void GoHome(TrafficTool tool) 
        {
            Console.WriteLine("员工:"+this.Name);
            tool.Run();
        }
}
    /// <summary>
    /// 项目经理类
    /// </summary>
public class PM:Employee
    {
        public PM(string id,string name,int age, Gender gender, int yearOfExperience):base(id,age,  name,gender)
        {
            this.YearOfExperience = yearOfExperience;
        }
        public PM() {

        }
        /// <summary>
        /// 资历
        /// </summary>
        private int _yearOfExperience; 
        public int YearOfExperience
        {
            get { return _yearOfExperience; }
            set { _yearOfExperience = value; }
        }           
        public override string SayHi() 
        {          
            string message = string.Format("大家好,我是 {0} ,今年 {1} 岁,项目管理经验 {2}年。",base.Name, base.Age, this.YearOfExperience);
            return message;
        }
}
    /// <summary>
    /// 程序员类
    /// </summary>
public class SE:Employee
    {
        /// <summary>
        /// 带参构造函数
        /// </summary>
        /// <param name="id">工号</param>
        /// <param name="name">姓名</param>
        /// <param name="age">年龄</param>
        /// <param name="gender">性别</param>
        /// <param name="popularity">人气值</param>
        public SE(string id,string name,int age, Gender gender, int popularity): base(id,age,  name,gender)
        {
            this.Popularity = popularity;
        }
        public SE() { }
        /// <summary>
        /// 人气值
        /// </summary>
        private int _popularity;

        public int Popularity
        {
            get { return _popularity; }
            set { _popularity = value; }
        }      
        public override string SayHi() 
        {
            string message = string.Format("大家好,我是 {0}, 今年 {1}岁,工号是 {2},我的人气值高达 {3}!",base.Name,base.Age,base.ID,this.Popularity);
            return message;
        }

04:抽象类和接口的相同点和不同点?

    相同点:

              (1) 都可以被继承 。

              (2) 都不能被实例化 。

              (3) 都可以包含方法声明。

              (4) 派生类必须实现未实现的方法 。

   不同点:

            (1)抽象类可以有构造方法,接口中不能有构造方法。

            (2)抽象类中可以包含静态方法,接口中不能包含静态方法。

            (3)抽象类可以有构造器,接口不能有构造器。

            (4)接口可以被多重实现,抽象类只能被单一继承。

            (5)抽象类定义的关键字是abstract,接口定义的关键字是interface。

            (6)抽象类继承的关键字是extends,接口的实现关键字是implements

            (7)一个类可以实现多个接口,但只能继承一个抽象类。

05:抽象方法和虚方法的不同点和相同点?

       不同点: (1)抽象类的方法关键词是:abstract,虚方法的方法关键字是:virtual。

                       (2)抽象类的方法:只作声明,无方法体/无实现,虚方法的方法:声明并实现方法。

                       (3)包含抽象方法的类不能实例化,而包含虚方法的类可以实例化。

                       (4)抽象方法必须在派生类中重写,虚方法不需要在派生类中重写。

        相同点:     子类/派生类都要重写父类的方法,关键字都是override。

06:定义抽象类和抽象方法的关键字?

       定义抽象类和抽象方法的关键字:abstract;

07:书本上XML那一章中有哪些方法?代码一一举例

//初始化一个xml实例
XmlDocument xml=new XmlDocument();
//导入指定xml文件
xml.Load(path);
xml.Load(HttpContext.Current.Server.MapPath("~/file/bookstore.xml"));
//指定一个节点
XmlNode root=xml.SelectSingleNode("/root");
//获取节点下所有直接子节点
XmlNodeList childlist=root.ChildNodes;
//判断该节点下是否有子节点
root.HasChildNodes;
//获取同名同级节点集合
XmlNodeList nodelist=xml.SelectNodes("/Root/News");
//生成一个新节点
XmlElement node=xml.CreateElement("News");
//将节点加到指定节点下,作为其子节点
root.AppendChild(node);
//将节点加到指定节点下某个子节点前
root.InsertBefore(node,root.ChildeNodes[i]);
//为指定节点的新建属性并赋值
node.SetAttribute("id","11111");
//为指定节点添加子节点
root.AppendChild(node);
//删除节点
XmlElement xe=(XmlElement)xnl.Item(i); 
root.RemoveChild(xe);
//获取指定节点的指定属性值
string id=node.Attributes["id"].Value;
//获取指定节点中的文本
string content=node.InnerText;
//保存XML文件
string path=Server.MapPath("~/file/bookstore.xml");
xml.Save(path);
 

  08:书本上文件那一章中有哪些方法?代码一一举例 

File.Exists("C:\\Text.txt");

File.Copy("C:\\Text.txt","D:\\Text.txt");
File.Delete("C:\\Text.txt");
File.Move("C:\\Text.txt","D:\\Text.txt");
                                                                                                                                                                                                                                                                         

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值