关于C#中静态方法与实例方法的认识

关于C#中静态方法与实例方法的认识

今天琢磨一个线程方面程序,发现一个C#中静态方法与实例方法之前没注意到的错误。源码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
using System.Runtime.InteropServices;

namespace Thread_Example
{
    internal class Program
    {
        static void Main(string[] args)
        {
            #region 创建无参的静态线程
             创建无参的静态线程
            //Thread thread1 = new Thread(new ThreadStart(Thread1));

             调用Start方法执行线程
            //thread1.Start();
            #endregion

            #region 创建无参的实例线程
            // 创建无参的实例线程
            ThreadTest test = new ThreadTest();
            Thread thread2 = new Thread(new ThreadStart(test.Thread2));

            // 调用Start方法执行线程
            thread2.Start();
            #endregion
            Console.ReadKey();
        }

        #region 创建一个无参的静态方法
        // static void Thread1()
        //{
        //    Console.WriteLine("这是无参的静态方法");
        // }
        #endregion

        
    }

    #region 创建一个无参的实例方法
    class ThreadTest
    {
        public void Thread2()
        {
            Console.WriteLine("这是无参的实例方法");
        }
    }
    #endregion

}

写完静态方法调用与动态方法调用发现出了问题,直接调用实例方法,调不起来。

1. 实例方法:

  • 关联对象: 实例方法是与对象实例相关联的,必须通过实例来调用。

  • this 关键字: 实例方法中可以使用 this 关键字引用当前实例。

  • 访问实例成员: 实例方法可以直接访问和修改实例的字段、属性和其他成员。

  • 生命周期: 实例方法的生命周期与对象实例的生命周期相同。

  • 示例代码:

    public class MyClass 
    { 
    	public void InstanceMethod() 
        { 
            Console.WriteLine("This is an instance method."); 
        } 
    } 
    class Program 
    { 
        static void Main() 
        { 
            MyClass obj = new MyClass(); 
            obj.InstanceMethod(); // 调用实例方法 
        } 
    }
    

2. 静态方法:

  • 关联类: 静态方法是与类关联的,通过类名直接调用,无需创建类的实例。

  • 无需实例: 静态方法中不能直接访问实例的字段和属性,因为没有与之关联的实例。

  • this 关键字: 静态方法中不能使用 this 关键字,因为它没有实例上下文。

  • 生命周期: 静态方法的生命周期与程序的生命周期相同。

  • 示例代码:

    public class MyClass 
    { 
        public static void StaticMethod() 
        { 
            Console.WriteLine("This is a static method."); 
        } 
    } 
    class Program 
    { 
        static void Main() 
        { 
            MyClass.StaticMethod(); // 直接调用静态方法 
        } 
    }
    

区别总结:

  • 实例方法与对象实例相关联,需要通过对象实例来调用,可以访问实例成员。
  • 静态方法与类关联,通过类名直接调用,不能访问实例成员。
  • 实例方法通过 this 关键字引用当前实例。
  • 静态方法不能使用 this 关键字,因为它没有实例上下文。
  • 实例方法的生命周期与对象实例的生命周期相同。
  • 静态方法的生命周期与程序的生命周期相同。

实例方法(Instance Methods):

优点:

  1. 访问实例成员: 实例方法可以直接访问和修改实例的字段、属性和其他成员。
  2. 灵活性: 实例方法与特定对象实例相关联,可以处理对象的状态,提供更多的灵活性。

缺点:

  1. 需要实例: 实例方法需要通过对象实例来调用,这可能导致一些额外的开销和复杂性。
  2. 无法直接调用: 无法在没有实例的情况下直接调用实例方法。

示例代码:

public class MyClass
{
    private int value;

    public void SetInitialValue(int initialValue)
    {
        value = initialValue;
    }

    public void Increment(int amount)
    {
        value += amount;
    }

    public void DisplayValue()
    {
        Console.WriteLine($"Current value: {value}");
    }
}

class Program
{
    static void Main()
    {
        MyClass obj = new MyClass();

        obj.SetInitialValue(10);
        obj.Increment(5);
        obj.DisplayValue(); // 输出:Current value: 15
    }
}

静态方法(Static Methods):

优点:

  1. 与类关联: 静态方法与类关联,通过类名直接调用,无需创建类的实例。
  2. 全局访问: 静态方法不依赖于特定的对象实例,可以在没有实例的情况下直接调用。

缺点:

  1. 无法访问实例成员: 静态方法无法直接访问实例的字段和属性,因为它没有与之关联的实例。
  2. 不灵活: 由于静态方法不与特定对象实例相关联,因此在处理对象状态时可能不够灵活。

示例代码:

public class MathOperations
{
    public static int Add(int a, int b)
    {
        return a + b;
    }

    public static int Multiply(int a, int b)
    {
        return a * b;
    }
}

class Program
{
    static void Main()
    {
        int sum = MathOperations.Add(3, 4);
        int product = MathOperations.Multiply(2, 5);

        Console.WriteLine($"Sum: {sum}, Product: {product}");
        // 输出:Sum: 7, Product: 10
    }
}
  • 实例方法优点: 提供了更多灵活性,可以直接访问和修改实例成员。
  • 实例方法缺点: 需要对象实例来调用,无法在没有实例的情况下直接调用。
  • 静态方法优点: 与类关联,全局访问,无需创建实例。
  • 静态方法缺点: 无法直接访问实例成员,可能在处理对象状态时不够灵活。
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值