1 public
共有访问。不受任何限制。
2 private
私有访问。只限于本类成员访问,子类,实例都不能访问。
3 protected
只限于本类和子类访问,实例不能访问。
4 internal
内部访问。只限于本项目内访问,其他不能访问。
5 protected internal
内部保护访问。只限于本项目或是子类访问,其他不能访问。
6 abstract
抽象类
7 sealed
密封的类
修饰符 | 含义 |
无或internal | 只有在当前项目中访问类 |
public | 可以在任何地方访问类 |
abstract或internal abstract | 类只能在当前项目中访问,不能实例化,只能供继承之用 |
public abstract | 类可以在任何地方访问,不能实例化,只能供继承之用 |
sealed或internal sealed | 类只能在当前项目中访问,不能供派生之用,只能实例化 |
public sealed | 类可以在任何地方访问,不能供派生之用,只能实例化 |
8 类和结构
先看一段实例代码
namespace Test
{
class myClass
{
public int val;
}
struct myStruct
{
public int val;
}
class Program
{
static void Main(string[] args)
{
myClass objectA = new myClass();
myClass objectB = objectA;
objectA.val = 10;
objectB.val = 20;
myStruct structA = new myStruct();
myStruct structB = structA;
structA.val = 30;
structB.val = 40;
Console.WriteLine("objectA.val = {0}",objectA.val);
Console.WriteLine("objectB.val = {0}",objectB.val);
Console.WriteLine("structA.val = {0}",structA.val);
Console.WriteLine("structB.val = {0}",structB.val);
Console.ReadKey();
}
}
}
输出结果为:
objectA = 20
objectB = 20
structA = 30
structB = 40
对象是引用类型(objectA和objectB)。在把对象赋值给变量的时候,实际上是把带有一个指针的变量赋值给了该指针所指向的对象。在实际代码中,指针是内存中的一个地址,地址是内存中该对象所在的位置。在用下面的代码行把第一个对象引用赋值给类型为myClass的第二个变量时,实际上是复制了这个地址。
myClass objectB = objectA;
这样两个变量就包含同一个对象的指针。
而结构是值类型。其变量并不包含结构的指针,而是包含结构本身。在用下面的代码把第一个结构赋值给类型为myStruct的第二个变量时,实际上是把第一个结构的所有信息复制到另一个结构中。
myStrujct structB = structA;