吉文斯:
问题是我无法执行以下操作,因为无法访问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并且存在类似的问题但是它们没有提供关于静态类中对象的嵌套列表以及如何从其他静态类中正确访问它们的任何明确见解。
答案 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
{
}