C# - 当我无法将其声明为 public 时如何获取不可访问的对象

问题描述 投票:0回答:1

可能会重复问题,因为它很简单,但我找不到问题的答案。我对 C# 和一般编码很陌生,但对对象和类仍然有点困惑。

我想从

defaultChar
类访问
Character
对象中的数据,但由于范围的原因,数据无法访问。我知道我可以移动
defaultChar
但我不想在我的
Program
类中包含大量字符数据(我想要更多字段,然后只是“别名”和更多字符),如何在不放置的情况下访问它它在
Program

public class Program
{
    public static void Main()
    {
        Character character = new();
        Console.WriteLine (character.defaultChar.alias); 
        // Error 'Character.defaultChar' is inaccessible due to its protection level
    }
}

public class Character
{
    public string alias {get; set;}
    
    Character defaultChar = new()
    {
        alias = "No Encontrado",
    };
}

我尝试将

defaultChar
公开,但这显然不起作用,我尝试使用带有数据的方法,但无论如何我最终都会返回大量数据。我真的不知道该怎么办。

预先感谢您花时间阅读本文。

c# class object scope
1个回答
0
投票

我尝试将 defaultChar 公开,但这显然不起作用

是的,确实如此。 但随后你会遇到不同的问题。 具体来说,无限递归。 这是因为当您创建

Character
的实例时:

Character character = new();

这涉及...创建

Character
的实例:

Character defaultChar = new()
{
    alias = "No Encontrado",
};

然后还会创建

Character
的实例,然后又创建
Character
的实例,等等

每个实例不需要每个实例都有相同的

defaultChar
。 相反,您可能只想要一个“全局”
defaultChar
。 为此,您可以将其设置为
static
,以便它与类本身相关联,而不是与任何给定的实例相关联。

例如:

public class Program
{
    public static void Main()
    {
        Console.WriteLine(Character.defaultChar.alias); 
    }
}

public class Character
{
    public string alias {get; set;}
    
    public static Character defaultChar = new()
    {
        alias = "No Encontrado",
    };
}
© www.soinside.com 2019 - 2024. All rights reserved.