c#编程
完成条件
封装 (Encapsulation)
简介
封装是一种将类中不必要的信息对外隐藏的手段,防止用户以非设计者意图的方式操作对象。
- **公共(
public
)**成员:向所有代码公开,表示类对外允许的操作。 - **私有(
private
)**成员:表示类的内部状态(如变量)或禁止外部用户访问的操作。private
是类和结构成员的默认访问修饰符。
示例:
public class Frog
{
private int _height = 0;
// 公共方法
public void JumpLow() { Jump(1); }
public void JumpHigh() { Jump(10); }
// 私有方法
void Jump(int height) { _height += height; }
}
在此示例中:
JumpLow
和JumpHigh
是Frog
类向外暴露的公共方法。Jump
方法和_height
变量是私有的,外部无法直接访问。
访问修饰符 (Protection Levels)
1. 私有(private
)
- 私有成员只能在类内部访问。
- 如果未指定访问修饰符,类成员默认是
private
。
示例:
namespace PrivateSample
{
public class Person
{
private string _name;
public Person(string name)
{
this._name = name; // 私有成员只能由类内部的构造函数或方法修改
}
}
public class Entry
{
static void Main(string[] args)
{
Person person = new Person("Samanta");
// person._name = "Sam"; // 错误:无法访问私有成员
}
}
}
2. 受保护(protected
)
- 受保护成员可以被类本身及其派生类访问。
示例:
namespace ProtectedSample
{
public class Person
{
protected string _name;
}
public class Warrior : Person
{
public void SetName(string name)
{
base._name = name; // 派生类可以访问受保护成员
}
}
public class Entry
{
static void Main(string[] args)
{
Warrior warrior = new Warrior();
warrior.SetName("Glades"); // OK
// warrior._name = "Sam"; // 错误:无法直接访问受保护成员
}
}
}
3. 公共(public
)
- 公共成员可以被任意类中的方法访问。
示例:
namespace PublicSample
{
public class Person
{
public string Name;
}
public class Entry
{
static void Main(string[] args)
{
Person person = new Person();
person.Name = "Debora"; // OK,公共成员可被外部访问
}
}
}
注意:出于良好的编程习惯,不建议直接暴露变量,尤其是那些需要通过 getter 和 setter 方法访问的字段。
4. 内部(internal
)
- 内部成员只能在同一程序集内访问。
- 如果顶级类未指定访问修饰符,默认是
internal
。
示例:
namespace InternalSample
{
public class Person
{
internal string Name;
}
public class Entry
{
static void Main(string[] args)
{
Person person = new Person();
person.Name = "Debora"; // OK,同一程序集内可以访问
}
}
}
5. 受保护的内部(protected internal
)
- 受保护的内部成员可以在同一程序集内访问,或者被派生类访问。
示例:
namespace InternalSample
{
public class Person
{
protected internal string Name;
}
public class Entry
{
static void Main(string[] args)
{
Person person = new Person();
person.Name = "Debora"; // OK,在同一程序集内可以访问
}
}
public class Book : Person
{
public void Display()
{
Console.WriteLine(this.Name); // OK,派生类可以访问
}
}
}
总结
访问修饰符 | 访问范围 |
---|---|
private |
只能在类内部访问。 |
protected |
只能在类本身及其派生类中访问。 |
public |
在任意位置均可访问。 |
internal |
只能在同一程序集内访问。 |
protected internal |
同一程序集内或派生类中均可访问。 |
通过使用合适的访问修饰符,可以有效地实现封装,保护类的内部状态,避免外部用户以非预期方式修改或访问类的成员。
最后修改: 2025年01月11日 星期六 23:06