访问修饰符的种类
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