You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#面向对象编程:是否无需实例化每个类即可调用类成员?

无需实例化调用类成员的解决方法

当然有办法实现无需创建类实例就能调用成员的需求,核心是使用静态成员(static修饰符)——静态字段、静态方法属于类本身,而非类的某个实例,因此可以直接通过类名访问。

具体改造方案

1. 将成员标记为static

把需要直接调用的方法、字段加上static关键字,这样就不需要实例化类,直接通过类名访问。

2. 修改后的代码示例

namespace OOPattempt
{
    class Skeleton
    {
        // 静态字段:属于类本身,所有关联类共享该值
        public static int hp = 50;
        // 静态方法:直接通过类名调用
        public static void Talking()
        {
            Console.WriteLine("Im a skeleton");
        }
    }

    class Archer : Skeleton
    {
        public static void StateHP()
        {
            // 父类静态字段需通过父类名访问(静态成员不参与继承)
            Console.WriteLine("My hp is {0}", Skeleton.hp);
        }
    }

    class Gaurd : Skeleton
    {
        public static int attackDamage = 10;
    }

    class StrongArcher : Archer
    {
        public static void StrongArchDamage()
        {
            Console.WriteLine("I do more damage then the weak skeleton");
        }
    }

    class WeakArcher : Archer
    {
        public static void WeakArchDamage()
        {
            Console.WriteLine("I do less damage then a stronger skeleton");
        }
    }

    internal class Program
    {
        static void Main(string[] args)
        {
            // 无需创建任何实例,直接通过类名调用静态成员
            Skeleton.Talking();
            Archer.StateHP();
            Console.WriteLine("Im a gaurd and my attack damage is {0}", Gaurd.attackDamage);
            WeakArcher.WeakArchDamage();
            StrongArcher.StrongArchDamage();
        }
    }
}

注意事项

  • 静态成员属于类,所有"实例"共享同一个值,如果需要每个角色拥有独立的属性(比如不同弓箭手的生命值不同),那还是得用实例成员,创建对象来区分。
  • 静态成员不参与继承,子类不能直接通过子类名访问父类的静态成员,必须显式用父类名调用。

内容的提问来源于stack exchange,提问作者Max

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 09:40:27