.NET-1-访问修饰符导致的可访问性不一致问题

访问修饰符的种类

public

private

internal

protected

protected internal

在变成中可能会应为类的访问修饰符,函数的访问修饰符不同导致他们的访问级别不同

从而导致父类与子类之间的继承

方法的返回参数,方法的参数等在调用的时候出现异常

下面是一些示例:

/// <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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值