无法访问静态类数组的嵌套属性

时间:2015-11-30 20:47:15

标签: c# arrays class nested-properties

吉文斯:

  1. 必须可以从另一个必须是静态的类(无选择)内部访问该类。
  2. FOO类必须是可递归的,支持给定示例中结构的项集合的嵌套数组。
  3. FOO必须完全可序列化,包括所有嵌套数组和包含XML的后续项目(不使用花哨的技巧 - 直接序列化为xml,它似乎只支持一个类,并相应地自动查找嵌套类/结构)< / LI>

    问题是我无法执行以下操作,因为无法访问FOOTabItem的属性。

    queue.finishTransaction(trans)  
    

    这是我无法通过以下方式公开对象的类代码:

    // can not be static
    public class TestClass : SomeFancyInheritedObject { 
    
        // must be static
        public static void Test() {
            FOO.FOOTabItem bar = new FOOTabItem();
    
            bar.Count = 100;  // This is inaccessible
        }
    
    }
    

    我也尝试在FOO中使用嵌套类而不是public static class FOO { public static int Money { get; set; } public static List<FOOTab> Tabs { get; set; } public static struct FOOTab { public static List<FOOTabItem> Items { get; set; } public static FOOTab TabInformation { get; set; } } public static struct FOOTabItem { public static ItemInfo Item { get; set; } public static int Count { get; set; } } public static FOO() { Tabs = new List<FOOTab>(); Money = 0; } } ,但这导致FOO抱怨我不能使用类作为对象参数,这就是我使用struct的原因。

    此代码没有语法错误。我可以公开FOO本身的属性/ etc并实例化结构的struct,但是我看不到结构的属性。

    我认为这可能是一个权限问题(公共/静态/内部/等),但我不确定要做些什么来纠正这个问题。我搜索过SO并且存在类似的问题但是它们没有提供关于静态类中对象的嵌套列表以及如何从其他静态类中正确访问它们的任何明确见解。

1 个答案:

答案 0 :(得分:1)

我已删除了以下代码中的所有静态关键字。在这里,bar.Count是可访问的。

public class TestClass : SomeFancyInheritedObject 
{ 
    public static void Test() {
        FOO.FOOTabItem bar = new FOO.FOOTabItem();
        bar.Count = 100; // This is now accessible
    }
}
public class FOO {
    public int Money { get; set; }
    public List<FOOTab> Tabs { get; set; }

    public FOO() {
        Tabs = new List<FOOTab>();
        Money = 0;
    }

    public struct FOOTab {
        public List<FOOTabItem> Items { get; set; }
        public FOOTab()
        {
            Items = new List<FOOTabItem>();
        }
    }

    public struct FOOTabItem {
        public ItemInfo Item { get; set; }
        public int Count { get; set; }
    }
}

更新: 在回复您的评论时,以下是我在VS中测试的代码:

class Program
{
    public static void Main(string[] args)
    {
        var foo = new FOO();
        var x = new XmlSerializer(typeof(FOO));
        using (var memoryStream = new MemoryStream())
        {
            using (var writer = new StreamWriter(memoryStream))
            {
                x.Serialize(writer, foo);
            }
        }
    }
}

public class FOO
{
    public int Money { get; set; }
    public List<FOOTab> Tabs { get; set; }

    public FOO()
    {
        Tabs = new List<FOOTab>();
        Money = 0;
    }

    public class FOOTab
    {
        public List<FOOTabItem> Items { get; set; }
        public FOOTab()
        {
            Items = new List<FOOTabItem>();
        }
    }

    public class FOOTabItem
    {
        public ItemInfo Item { get; set; }
        public int Count { get; set; }
    }
}

public class ItemInfo
{
}