类基础(C# 与 Java)

更新:2007 年 11 月

以下各节对 C# 和 Java 的修饰符进行了比较。

访问修饰符

C# 修饰符与 Java 修饰符十分相似,只有几个小小的差异。可以使用访问修 符声明类的每个成员或类本身,从而定义允许访问的范围。不是在其他类内部声明的类只能指定公共修饰符或内部修饰符。嵌套的类与其他类成员一样,可以指定下面五个访问修饰符中的任何一个:

  • public

    对所有类都可见。

  • protected

    只对派生类可见。

  • private

    只在给定的类中可见。

  • internal

    只在相同的程序集内可见。

  • protected internal

    只对当前程序集或从包含类派生的类型可见。

Public、Protected 和 Private 修饰符

public 修饰符表示成员可在任何地方(类的内部和外部)使用。protected 修饰符指示只能从包含类或从包含类派生的类内部进行访问。private 修饰符表示只能从包含类型的内部进行访问。在 C# 中,默认的访问修饰符为 Private,而在 Java 中,默认情况下,可在包含包内的任何位置进行访问。

Internal 修饰符

只能在当前程序集内部访问 internal 项。.NET Framework 中的程序集差不多相当于 Java 的 JAR 文件,它表示可从其中构造其他程序的构造块。

Protected Internal 修饰符

protected internal 项只对当前程序集或从包含类派生的类型可见。

Sealed 修饰符

类声明中带有 sealed 修饰符的类与抽象类相反:它不能被继承。您可以将一个类标记为 Sealed,以防止其他类重写其功能。自然,密封类不可能是抽象类。还要注意,struct 是隐式密封的;因此,它不能被继承。sealed 修饰符相当于在 Java 中用 final 关键字标记一个类。

Readonly 修饰符

若要在 C# 中定义常数,请使用 constreadonly 修饰符来代替 Java 的 final 关键字。C# 中这两个修饰符的主要不同在于,const 项在编译时处理,而 readonly 字段的值则是在运行时指定。这意味着可以在类构造函数以及声明中对 readonly 字段赋值。例如,下面的类声明了一个名为 IntegerVariable 的 readonly 变量,它在类构造函数中初始化:

public class SampleClass
{
    private readonly int intConstant;

    public SampleClass ()  //constructor
    {
        // You are allowed to set the value of the readonly variable 
        // inside the constructor
        intConstant = 5;
    }


    public int IntegerConstant
    {
        set
        {
            // You are not allowed to set the value of the readonly variable 
            // anywhere else but inside the constructor

            // intConstant = value;  // compile-time error
        }
        get
        {
            return intConstant;
        }
    }
}
class TestSampleClass
{
    static void Main()
    {
        SampleClass obj= new SampleClass();

        // You cannot perform this operation on a readonly field.
        obj.IntegerConstant = 100;

        System.Console.WriteLine("intConstant is {0}", obj.IntegerConstant);  // 5
    }
}

如果 readonly 修饰符应用于静态字段,它应该在类的静态构造函数中被初始化。

请参见

概念

C# 编程指南

参考

访问修饰符(C# 编程指南)

常量(C# 编程指南)

其他资源

C# 编程语言(针对 Java 开发人员)