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

C#中如何访问类内不可访问的defaultChar对象(不设public)

问题分析与解决方案

首先,你的代码里有两个核心问题:

  • defaultChar是私有实例字段:C#中类成员默认访问级别是private,所以外部无法访问;而且它是实例字段,意味着每创建一个Character对象,都会生成一个全新的defaultChar实例,完全没必要——默认角色应该是类共享的全局实例。
  • 你尝试设public但无效,大概率是没给字段加public修饰符(当前代码里defaultChar没有任何访问修饰符)。

推荐解决方案:使用静态只读属性(最符合C#设计规范)

把defaultChar改成类级别的静态只读属性,这样所有代码都能访问,且默认实例不会被意外修改,也不会重复创建:

修改后的Character类:

public class Character
{
    public string alias { get; set; }
    
    // 静态只读属性,类共享的默认实例
    public static Character DefaultChar { get; } = new()
    {
        alias = "No Encontrado",
    };
}

然后在Program里直接通过类名访问,不需要创建Character实例:

public class Program
{
    public static void Main()
    {
        Console.WriteLine(Character.DefaultChar.alias); // 正常输出 "No Encontrado"
    }
}

为什么不推荐实例字段?

如果把defaultChar改成public实例字段(public Character defaultChar = new(...)),虽然能解决访问问题,但每个Character对象都会自带一个defaultChar实例,完全是资源浪费——默认角色只需要一个全局的就够了。

关于“方法返回会产生大量数据”的误区

C#中引用类型(比如Character类的对象)的返回值是引用地址,不是整个对象的复制,所以即使写个方法返回defaultChar,也不会产生大量数据,比如:

public class Character
{
    private static readonly Character _defaultChar = new() { alias = "No Encontrado" };
    
    public static Character GetDefaultChar()
    {
        return _defaultChar;
    }
}

但静态属性比方法更简洁直观,更适合这种场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 20:54:57