首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

在继承中,关于访问级别的有关问题

2013-11-08 
在继承中,关于访问级别的问题using Systemusing System.Collections.Genericusing System.Linqusing Sy

在继承中,关于访问级别的问题
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 派生类构造函数
{
    /// <summary>
    /// 创建一个基类Person
    /// </summary>
    public class Person
    {
        public string name;         //姓名,公有成员
        protected string id;        //身份证号,保护成员
        private string tel;         //电话号码,私有成员

        //定义无参构造函数
        public Person()
        {

        }
        //有参构造函数重载
        public Person(string p_name, string p_id, string p_tel)
        {
            name = p_name;
            id = p_id;
            tel = p_tel;
        }

        //定义Tel属性
        public string Tel
        {
            get { return tel; }
            set { tel = value; }
        }

        //定义PrintPerson()方法,打印个人信息
        public void PrintPerson()
        {
            Console.WriteLine("\n个人信息如下:");
        }
    }

    //定义派生类Student
    public class Student : Person
    //class Student : Person
    {
        public string sno;       //学号,公有成员
        public string classname;     //班级名称,公有成员
        public Student()
        {

        }

        //有参构造函数重载
        public Student(string s_name, string s_id, string s_tel, string s_sno, string s_classname/*包括基类需要初始化的数据成员和派生类自身新增的数据成员初始化参数*/)
            : base(s_name, s_id, s_tel/*包含在参数表1中用来初始化基类数据成员的参数*/)
        {
            sno = s_sno;
            classname = s_classname;
        }

        //定义Id属性
        public string Id
        {
            get { return id; }
            set { id = value; }
        }

        //定义PirntStudent方法,打印学生信息
         public void PirntStudent()
        {
            Console.WriteLine("姓名:{0}", name);
            Console.WriteLine("学号:{0}", sno);
            Console.WriteLine("班级:{0}", classname);
            Console.WriteLine("身份证号:{0}", id);
            Console.WriteLine("电话号码:{0}", Tel);
        }

    }
    class Program
    {
        static void Main(string[] args)
        {
            //创建派生类对象
            Student s = new Student();
            //派生类对象实例赋值


            s.name = "陈紫函";
            s.sno = "123456";
            s.classname = "实验2班";
            s.Id = "123456789";
            s.Tel = "123";

            //调用方法
            s.PrintPerson();
            s.PirntStudent();

            Student s1 = new Student("程成", "111", "实验1班", "222", "333");
            s1.PrintPerson();
            s1.PirntStudent();
            Console.ReadKey();
        }
    }
}


代码中红颜色字体,那个字段id的访问级别为protected,那么在这个级别下,派生类不是直接可以访问基类吗?为什么还要为id定义属性,通过属性来访问基类呢 ?

[解决办法]
派生类中可以访问,但Program类中能访问吗,访问不到吧。

但你子类中的Id属性是public的,所以你在Program中就能访问那个Id了。

热点排行