C# 语法练习(9): 类[一] - 访问限制、方法、字段、属性


所有类默认继承于 System.Object(或叫 Object):

using System;



class MyClass1

{



}



class MyClass2 : Object

{



}



class MyClass3 : System.Object

{



}



class Program

{

    static void Main()

    {

        MyClass1 obj1 = new MyClass1();

        MyClass2 obj2 = new MyClass2();

        MyClass3 obj3 = new MyClass3();



        Console.WriteLine(obj1.ToString()); //MyClass1

        Console.WriteLine(obj2.ToString()); //MyClass2

        Console.WriteLine(obj3.ToString()); //MyClass3



        Console.ReadKey();

    }

}


 
   

类的访问限制和抽象类、密封类:

using System;



/* internal: 只用于当前项目的类, 这是默认的可以省略 */

/* public  : 公开使用的类 */

class MyClass1          { }

internal class MyClass2 { }

public class MyClass3   { }



/* abstract: 只能继承、不能直接实例化的类  */

abstract class MyClass4          { }

internal abstract class MyClass5 { }

public abstract class MyClass6   { }



// sealed: 不能继承的类

sealed class MyClass7          { }

internal sealed class MyClass8 { }

public sealed class MyClass9   { }



class Program

{

    static void Main()

    {

        MyClass1 obj1 = new MyClass1();

        MyClass2 obj2 = new MyClass2();

        MyClass3 obj3 = new MyClass3();

        /* MyClass4、MyClass5、MyClass6 是抽象类, 不能实例化  */

        MyClass7 obj7 = new MyClass7();

        MyClass8 obj8 = new MyClass8();

        MyClass9 obj9 = new MyClass9();



        Console.WriteLine(obj1.ToString()); //MyClass1

        Console.WriteLine(obj2.ToString()); //MyClass2

        Console.WriteLine(obj3.ToString()); //MyClass3

        Console.WriteLine(obj7.ToString()); //MyClass7

        Console.WriteLine(obj8.ToString()); //MyClass8

        Console.WriteLine(obj9.ToString()); //MyClass9



        Console.ReadKey();

    }

}


 
   

方法的访问限制:

using System;



class MyClass

{

    /* private: 类自身使用的私有方法, 这是默认的 */

    string Method1()           { return "Method1"; }

    private string Method2()   { return "Method2"; }



    /* protected: 子类可以继承的方法 */

    protected string Method3() { return "Method3"; }



    /* internal: 当前项目可以使用的方法 */

    internal string Method4()  { return "Method4"; }



    /* public: 公开的方法 */

    public string Method5()    { return "Method5"; }

}



class Program

{

    static void Main()

    {

        MyClass obj = new MyClass();



        /* 由于访问级别的限制, MyClass 的 Method1、Method2、Method3 都不能访问 */



        Console.WriteLine(obj.Method4()); //Method4

        Console.WriteLine(obj.Method5()); //Method5



        Console.ReadKey();

    }

}


 
   

静态方法:

using System;



class MyClass

{

    /* 静态方法 */

    public static string Fun1()   { return "Fun1"; }

    internal static string Fun2() { return "Fun2"; }



    /* 一般方法 */

    public string Fun3()          { return "Fun3"; }

    internal string Fun4()        { return "Fun4"; }

}



class Program

{

    static void Main()

    {

        /* 静态方法通过类名调用: */

        Console.WriteLine(MyClass.Fun1()); //Fun1

        Console.WriteLine(MyClass.Fun2()); //Fun2



        /* 非静态方法通过对象调用: */

        MyClass obj = new MyClass();

        Console.WriteLine(obj.Fun3());     //Fun3

        Console.WriteLine(obj.Fun4());     //Fun4



        Console.ReadKey();

    }

}


 
   

字段:

using System;



class MyClass

{

    public int F1; /* 字段也有 public、internal、protected、private 的区别, 默认是 private */

    public static int F2;       /* 静态字段, 可通过类名读写 */

    public const int F3 = 2008; /* 常量字段, 可通过类名读, 只读 */

    public readonly int F4;     /* 只读字段, 通过对象读; 只能在声明时和构造函数中赋值 */

    

    public MyClass()

    {

        F4 = 2010;

    }

}



class Program

{

    static void Main()

    {

        /* 通过类名可以访问 F2、F3; 但 F3 是只读的 */

        Console.WriteLine(MyClass.F2); //0

        Console.WriteLine(MyClass.F3); //2008

        MyClass.F2 = 2009;

        Console.WriteLine(MyClass.F2); //2009



        /* 通过对象可以访问 F1、F4; 但 F4 是只读的 */

        MyClass obj = new MyClass();

        Console.WriteLine(obj.F1);     //0

        Console.WriteLine(obj.F4);     //2010

        obj.F1 = 2009;

        Console.WriteLine(obj.F1);     //2009



        Console.ReadKey();

    }

}


 
   

属性:

using System;



class MyClass

{

    private int MyInt;



    public int MyProperty 

    { 

        get { return MyInt; }

        set { if (value >= 0) MyInt = value; else MyInt = 100; }

    }

}



class Program

{

    static void Main()

    {

        MyClass obj = new MyClass();



        obj.MyProperty = 2009;

        Console.WriteLine(obj.MyProperty); //2009



        obj.MyProperty = -1;

        Console.WriteLine(obj.MyProperty); //100



        Console.ReadKey();

    }

}


 
   

只读属性:

using System;



class MyClass

{

    private int MyInt = 100;



    public int MyProperty 

    { 

        get { return MyInt; }

    }

}



class Program

{

    static void Main()

    {

        MyClass obj = new MyClass();



        Console.WriteLine(obj.MyProperty); //100



        Console.ReadKey();

    }

}


 
   

你可能感兴趣的:(C#)