1.关于C#中的5种修饰符
public (公有的)谁都可以访问
private (私有的)只限于本类成员访问。 子类和实例都不能访问。
protected (受保护的)只限于本类和子类访问,实例不能访问。
internal (内部的) 限于当前命名空间下访问,其他命名空间不能访问
protected internal(受保护内部的)只限于当前命名空间下的本类或子类访问,实例和其他命名空间不能访问
2.修饰符的详细介绍
public (公有的)
public 共有的,这个比较好理解了,公有的也就是说谁都可以访问它,不受任何限制,当前类,子类,实例对象,都可以访问到。。
打个比方,就比如说家里有一个车,这个车主说了这是公用车,没有钥匙,谁来都可以用这个车,没有什么限时。下面做个示例演示一下。
示例:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 测试
{
class Program
{
static void Main(string[] args)
{
// Text1是public 修饰的,所以在这里是可以访问,创建实例的
Text1 text1 = new Text1();
// t 也是public 修饰的,所以在这里是可以访问,并对其赋值
text1.vehicle = "怎么谁都能调用我!!! 原来我是public修饰过的";
// 这里通过类的示例名去调用类的方法,方法也public 修饰的
text1.show();
Console.ReadKey();
}
}
/// <summary>
/// 这个类 是用public 修饰的,就是说他是公有的 谁都可以访问的
/// </summary>
public class Text1
{
public string vehicle;
/// <summary>
/// 这是一个public 修饰的测试方法,用来输出的
/// </summary>
public void show()
{
// 这里是一个输出语句
Console.WriteLine(vehicle);
}
}
}
private (私有的)
只能在当前类内部进行访问使用,就算是子类,实例对象,都访问不到。
还是以说家里的那个车,这回这个车主说了这是 私有的,就我一个人可以使用,其余的人谁也不行,就算是车主儿子也不能用。
示例:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 测试
{
class Program
{
static void Main(string[] args)
{
// Text1是public 修饰的,所以在这里是可以访问,创建实例的
Text1 text1 = new Text1();
// 这里通过类的示例名去调用类的方法,方法也public 修饰的
text1.show();
Console.ReadKey();
}
}
/// <summary>
/// 这个类 是用public 修饰的,就是说他是公有的 谁都可以访问的
/// </summary>
public class Text1
{
// 这是私有成员,他只能在Text1类中使用,在其他的地方是调用不到的
private string vehicle = "我是private修饰的,所以我只能在Text1中使用";
/// <summary>
/// 这是一个public 修饰的测试方法,用来输出的
/// </summary>
public void show()
{
// 这里是一个输出语句
Console.WriteLine(vehicle);
}
}
}
protected (受保护的)
保护访问。只限于本类和子类访问,实例不能访问。
还是说家里的那个车,这回车主说了,这个车是我家的宝贝,除了我自己家人,谁也不能用,我谁都不借。
示例:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 测试
{
class Program
{
static void Main(string[] args)
{
// Text1是public 修饰的,所以在这里是可以访问,创建实例的
Text1 text1 = new Text1();
// 这里通过类的示例名去调用类的方法,方法也public 修饰的
text1.show1();
Text2 text2 = new Text2();
text2.show2();
Console.ReadKey();
}
}
/// <summary>
/// 这个类 是用public 修饰的,就是说他是公有的 谁都可以访问的
/// </summary>
public class Text1
{
// 这是受保护的成员,他只能在Text1和Text1的子类可以使用
protected string vehicle = "我是protected修饰的,所以我只能在Text1和Text1的子类可以使用";
/// <summary>
/// 这是一个public 修饰的测试方法,用来输出的
/// </summary>
public void show1()
{
Console.WriteLine("这是父类调用vehicle");
// 这里是一个输出语句
Console.WriteLine(vehicle);
}
}
/// <summary>
/// 这里是用public 修饰的,并且继承 Text1
/// </summary>
public class Text2 : Text1
{
/// <summary>
/// 这是一个public 修饰的测试方法,用来输出的
/// </summary>
public void show2()
{
Console.WriteLine("这是子类调用vehicle");
// 这里是一个输出语句
Console.WriteLine(vehicle);
}
}
}
internal (内部的)
内部访问。只限于本项目内访问,也就是说可以在当前的命名空间下面内部随意访问,其他命名空间下面不能是访问。
示例:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 测试
{
class Program
{
static void Main(string[] args)
{
// Text1是public 修饰的,所以在这里是可以访问,创建实例的
Text1 text1 = new Text1();
text1.vehicle = "vehicle是在当前命名空间下面,可以访问得到";
// 这里通过类的示例名去调用类的方法,方法也public 修饰的
text1.show1();
Console.ReadKey();
}
}
/// <summary>
/// 这个类 是用public 修饰的,就是说他是公有的 谁都可以访问的
/// </summary>
public class Text1
{
// 这是内部的的成员,他只能在 测试这个命名空间下面被访问
internal string vehicle ;
/// <summary>
/// 这是一个public 修饰的测试方法,用来输出的
/// </summary>
public void show1()
{
Console.WriteLine("这是父类调用vehicle");
// 这里是一个输出语句
Console.WriteLine(vehicle);
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using 测试;
namespace 测试2
{
class Program
{
static void Main(string[] args)
{
// Text1是public 修饰的,所以在这里是可以访问,创建实例的
Text1 text1 = new Text1();
//vehicle 成员是用 internal修饰的,所以无法访问
//text1.vehicle = "无法访问";
}
}
}
protected internal (受保护内部的)
这个 访问修饰符 和protected 没什么区别,这里是说内部受保护的,在外部访问不到,protected受保护的,在外部同样也访问不到,至于在内部里面访问,protected internal 和 单独的protected 没什么区别