第一讲:访问修饰符

本文介绍了C#中的四种访问修饰符:Public、Protected、Internal和Private,详细解释了每种修饰符如何控制类成员的访问权限,并通过具体示例展示了不同访问级别的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

第一讲:访问修饰符

1.访问修饰符是一些关键字,用于指定声明的成员或类型的可访问性。 本节介绍四个访问修饰符:

l         Public

l         Protected

l         Internal

l         Private

使用这些访问修饰符可指定下列五个可访问性级别:

public:访问不受限制。

protected:访问仅限于包含类或从包含类派生的类型。

Internal:访问仅限于当前程序集。

protected internal:访问仅限于当前程序集或从包含类派生的类型。

private:访问仅限于包含类型

1.       public 关键字是类型和类型成员的访问修饰符。 公共访问是允许的最高访问级别。 对访问公共成员没有限制,如下例所示:

class SampleClass

{

    public int x; // No access restrictions.

}

2.       在下面的示例中,声明了两个类:PointTest 和 MainClass。 直接从 MainClass 访问 PointTest 的公共成员 x 和 y。

class PointTest

{

    public int x;

    public int y;

}

 

class MainClass4

{

    static void Main()

    {

        PointTest p = new PointTest();

        // Direct access to public members:

        p.x = 10;

        p.y = 15;

        Console.WriteLine("x = {0}, y = {1}", p.x, p.y);

    }

}

// Output: x = 10, y = 15

3.      internal 关键字是类型和类型成员的访问修饰符。 只有在同一程序集的文件中,内部类型或成员才是可访问的,如下例所示:

public class BaseClass

{

    // Only accessible within the same assembly

    internal static int x = 0;

}

此示例包含两个文件:Assembly1.cs 和 Assembly1_a.cs。 第一个文件包含内部基类 BaseClass。 在第二个文件中,实例化 BaseClass 的尝试将产生错误。

// Assembly1.cs

// Compile with: /target:library

internal class BaseClass

{

   public static int intM = 0;

}

// Assembly1_a.cs

// Compile with: /reference:Assembly1.dll

 

class TestAccess

{

   static void Main()

   {

      BaseClass myBase = new BaseClass();   // CS0122

   }

}

 

在此示例中,使用与示例 1 中所用的文件相同的文件,并将 BaseClass 的可访问性级别更改为 public。 还将成员 IntM 的可访问性级别更改为 internal。 在此例中,您可以实例化类,但不能访问内部成员。

// Assembly2.cs

// Compile with: /target:library

public class BaseClass

{

   internal static int intM = 0;

}

 

// Assembly2_a.cs

// Compile with: /reference:Assembly1.dll

public class TestAccess

{

   static void Main()

   {

      BaseClass myBase = new BaseClass();   // Ok.

      BaseClass.intM = 444;    // CS0117

   }

}

 

4.         private 关键字是一个成员访问修饰符。 私有访问是允许的最低访问级别。 私有成员只有在声明它们的类和结构体中才是可访问的,如下例所示:

class Employee

{

    private int i;

    double d;   // private access by default

}

在此示例中,Employee 类包含两个私有数据成员 name 和 salary。 作为私有成员,它们只能通过成员方法来访问。 添加名为 GetName 和 Salary 的公共方法,以便可以对私有成员进行受控的访问。 通过公共方法访问 name 成员,而通过公共只读属性访问salary 成员。

 

class Employee2

{

    private string name = "FirstName, LastName";

    private double salary = 100.0;

 

    public string GetName()

    {

        return name;

    }

 

    public double Salary

    {

        get { return salary; }

    }

}

 

class PrivateTest

{

    static void Main()

    {

        Employee2 e = new Employee2();

 

        // The data members are inaccessible (private), so

        // they can't be accessed like this:

        //    string n = e.name;

        //    double s = e.salary;

 

        // 'name' is indirectly accessed via method:

        string n = e.GetName();

 

        // 'salary' is indirectly accessed via property

        double s = e.Salary;

    }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值