写了一大半,发现写崩了,前面有很多东西没有写到,这两天会添加一些补充的内容。
今天我们首先来看一下 C# 中的访问修饰符。
在 C# 中,不管是类型成员都有一个访问级别,这个级别可以控制你程序中的定义的内容,能不能被其他代码使用,我们通常把访问级别称为访问修饰符(Access Modifier)。
在 C# 中,有以下几种访问修饰符:
public:访问不受任何限制;
protected:只限本类或子类成员访问,其他实例成员都不能访问;
private:只限本类成员访问,子类和其他实例成员不能访问;
internal:只限于本项目内访问;
下面我们来看一个示例:public
通过右击项目名,选项 Add item,添加一个 Class 文件
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApp23
{
class TestClass
{
public string name = "Aaron"; // 数据类型为 public
public int age = 28;
}
}
更改主文件:
using System;
namespace ConsoleApp23
{
class Program
{
static void Main(string[] args)
{
var p = new TestClass(); // 在主文件中调用 Class
Console.WriteLine($"{p.name} is {p.age} years old.");
}
}
}
运行结果:
Aaron is 28 years old.
新建一个项目文件:
下面我们来看一下 protected 的示例,我们直接修改前面的代码:将 Class 中的数据类型改成 protected
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApp23
{
class TestClass
{
protected string name = "Aaron";
protected int age = 28;
}
}
我们会发现 VS 下面的 Error 窗口,显示了错误:
修改主程序代码:
using System;
namespace ConsoleApp23
{
class Program:TestClass // 创建一个子类(Class)
{
static void Main(string[] args)
{
var p = new Program();
Console.WriteLine($"{p.name} is {p.age} years old.");
}
}
}
这次没有报错,运行结果:
Aaron is 28 years old.
当再次将 Protected 改成 private,代码又出现了错误:
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApp23
{
class TestClass
{
private string name = "Aaron";
private int age = 28;
}
}
错误内容,如图所示:
private 的数据没办法直接被其他 Class 调用,但我们可以通过使用 public 的方法,来实现调用,修改 Class 文件代码:
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApp23
{
class TestClass
{
private string name = "Aaron";
private int age = 28;
public string GetName() // 创建 public 方法,并通过 return 返回值
{
return name;
}
public int GetAge()
{
return age;
}
}
}
修改主程序代码:
using System;
namespace ConsoleApp23
{
class Program:TestClass
{
static void Main(string[] args)
{
var p = new TestClass();
string n = p.GetName(); // 调用 public 方法
int a = p.GetAge();
Console.WriteLine($"{n} is {a} years old.");
}
}
}
命令输出:
Aaron is 27 year old.
我们再来看看 internal,我们将前面一个项目文件中的 class 改成 internal 类型:
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApp23
{
class TestClass
{
internal string name = "Aaron";
internal int age = 28;
}
}
更改主程序文件:
using System;
namespace ConsoleApp23
{
class Program:TestClass
{
static void Main(string[] args)
{
var p = new TestClass();
string n = p.name;
int a = p.age;
Console.WriteLine($"{n} is {a} years old.");
}
}
}
运行程序:可以正常运行。
Aaron is 28 years old.
现在我们重新添加一个项目文件(右击 Solution,并选择 Add,添加一个新的项目文件),并引用前面一个项目(引用需要在项目 > 项添加项目引用中添加。):
using System;
using ConsoleApp23;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
var p = new TestClass();
string n = p.name;
int a = p.age;
Console.WriteLine($"{n} is {a} years old.");
}
}
}
发现下面报错:
将 class 和数据的类型,改成 public 就可以了。
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApp23
{
public class TestClass
{
public string name = "Aaron";
public int age = 28;
}
}
在 C# 中还有两个组合的访问修饰符:protected internal 和 private protected。
下面是官方的关于访问修饰符的摘要表: