• .NET 基础 一步步 一幕幕[面向对象之静态、非静态]


    静态、非静态

    先来看一段代码来区分静态与非静态:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace 静态和非静态的区别
    {
    
        /**
         * 非静态类
         * 既可以定义静态字段、静态属性、静态方法。
         * 也可以定义非静态(实例成员)字段、非静态(实例成员)属性、非静态(实例成员)静态方法。
         **/
    
        //非静态类
        public class Person1
        {
            //实例成员(非静态)
            private int _id;
    
            //实例属性(非静态)
            public int ID
            {
                get { return _id; }
                set { _id = value; }
            }
    
            //实例方法(非静态)
            public void Showinfo()
            {
            }
    
    
    /*--------------------------------------------------------------------*/
    
    
            //静态字段
            private static string _name;
    
            //静态属性
            public static string Name
            {
                get 
                {
                    return _name;
                }
                set
                {
                    _name = value;
                }
            }
            //静态方法
            public static void Sho()
            {
     
            }
        }
    }
    

    可以看出静态与非静态的区别在于 关键字 : static

    静态和非静态的区别:

    1)、在非静态类中,既可以有实例成员,也可以有静态成员。

    2)、在调用实例成员的时候,需要使用对象名.实例成员;

    在调用静态成员的时候,需要使用类名.静态成员名;

    3)、非静态类中:既可以定义静态字段、静态属性、静态方法,也可以定义非静态(实例成员)字段、非静态(实例成员)属性、非静态(实例成员)方法。

    现在来看一个静态与非静态的小案例:

    static void Main(string[] args)
            {
                //调用实例成员
                Person p = new Person();
    
                //非静态方法
                p.M1();
    
                //静态方法
                Person.M2();
            
    
                Console.WriteLine();
                Console.ReadKey();
            }
    public class Person
        {
            private static string _name;
    
            public static string Name
            {
                get { return Person._name; }
                set { Person._name = value; }
            }
            private char _gender;
    
            public char Gender
            {
                get { return _gender; }
                set { _gender = value; }
            }
            public void M1()
            {
               
                Console.WriteLine("我是非静态的方法");
            }
            public static void M2()
            {
                
                Console.WriteLine("我是一个静态方法");
            }
    }
    

    运行结果:

     

    总结:

    静态成员必须使用类名去调用,而实例成员使用对象名调用。

    静态函数中,只能访问静态成员,不允许访问实例成员。

    实例函数中,既可以使用静态成员,也可以使用实例成员。

    静态类中只允许有静态成员,不允许出现实例成员。

    使用:

    1)、如果你想要你的类当做一个"工具类"去使用,这个时候可以考虑将类写成静态的。

    2)、静态类在整个项目中资源共享。只有在程序全部结束之后,静态类才会释放资源。

    本篇就到这里了,最后打个小广告:QQ群: .NET 一步步一幕幕  群号:590170361 (加群备注:博客园看到的)

  • 相关阅读:
    IPFS的配置安装
    NEO VM原理及其实现(转载)
    基于NEO的私链(Private Blockchain)
    用 C# 编写 NEO 智能合约
    undefined is not an object (evaluating '_react2.PropTypes.string')
    React-native-camera error with Expo: undefined is not an object (evaluating 'CameraManager.Aspect')
    React Natived打包报错java.io.IOException: Could not delete path '...androidsupportv7'解决
    React native Configuration with name 'default' not found.
    exe程序嵌入Winform窗体
    HDOJ-2006求奇数的乘积
  • 原文地址:https://www.cnblogs.com/yuhangwang/p/6261844.html
Copyright © 2020-2023  润新知