zoukankan      html  css  js  c++  java
  • 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();
        }
    }
    

  • 相关阅读:
    Spring解决循环依赖的三种方式
    MySQL深度分页
    MySQL大数据量分页查询方法及其优化
    java进程 cpu100%问题排查
    Java线程池如何合理配置核心线程数
    Btree和B+tree的区别
    Python3 for Linux 安装
    redis sentinel 相关参数及命令
    postman 连接mysql
    oracle-数据库的各种-锁-详解
  • 原文地址:https://www.cnblogs.com/del/p/1366958.html
Copyright © 2011-2022 走看看