.NET基础加强-1-可访问性不一致问题

/// <summary>
    /// 可访问性不一致问题
    /// 在继承或者使用我们自定义的类的时候
    /// 可能会因为访问级别不同导致编译的时候报错
    /// 如下面的示例
    ///
    /// 其实解决中中问题,只要修改访问修饰符就可以解决
    /// 保持他们的访问级别一致
    /// </summary>
    public class Class1
    {


    }


    #region
    //子类的访问级别不能高于父类的访问级别
    //可以小于或者等于

    class Person
    {

    }
    /// <summary>
    /// 类如果没有写访问修饰符,默认为internal
    /// 如果父类的权限为internal,子类的为public
    /// 这是为了防止父类受到保护成员,在子类继承之后会暴露出来
    /// 导致父类的安全性及降低
    /// 所以这里编译会报错
    /// </summary>
    public class Test : Person
    {

    }

    #endregion



    #region
    class Person1
    {
        private string _name;

        public string Name
        {
            get { return _name; }
            set { _name = value; }
        }
    }
    /// <summary>
    /// 应为类Person1的访问级别为internal
    /// 但是Test2的类中的方法SayHi的访问级别是public,是没法直接将Person1的对象当做参数传递给方法SayHi来使用
    /// 所以这里编译会报错
    /// </summary>
    public class Test2
    {
        public void SayHi(Person1 per)
        {
            Console.WriteLine(per.Name);
        }
    }

    #endregion



    #region
    class Person2
    {
        private string _name;

        public string Name
        {
            get { return _name; }
            set { _name = value; }
        }
    }
    /// <summary>
    /// 虽然方法的访问修饰符是public
    /// 但是两个类的访问修饰符都是internal,类都访问不到,成员定义为public是不会影响的
    /// 这里是可以使用,不会报错
    /// </summary>
    class Test2
    {
        public void SayHi(Person2 per)
        {
            Console.WriteLine(per.Name);
        }
    }
    #endregion



    #region
    class Person3
    {

    }
    /// <summary>
    /// 方法的参数需要和方法的访问级别保持一致
    /// 方法的返回值也要和方法的访问级别保持一致
    /// 所以这里也会报错
    /// </summary>
    public class Test3
    {
        public Person3 Getper()
        {
            return new Person3();
        }
    }

    #endregion




    #region
    class Person4
    {
 
    }
    public class Test
    {
        /// <summary>
        /// 属性的本质也是方法
        /// 所以也会因为访问级别不一致
        /// 而导致编译报错
        /// </summary>
        public Person4 FildName
        {
            get;
            set;
        }
    }
    #endregion

猜你喜欢

转载自blog.csdn.net/m0_37532448/article/details/80811743