VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > C#教程 > c#编程 >
  • c#语法练习9 类——访问限制、方法、字段和属性

制作者:剑锋冷月 单位:无忧统计网,www.51stat.net
 

  所有类默认继承于 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();
  }
}


		

 

 

 

  方法的访问限制:

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();
  }
}



相关教程