C# 如何通过一些进程在动态参数中创建对象?
当我从MyMenu类创建对象时,出现了几个错误 我想把它放在房间里C# 如何通过一些进程在动态参数中创建对象?,c#,initialization,C#,Initialization,当我从MyMenu类创建对象时,出现了几个错误 我想把它放在房间里 Id参数将自动增加 当我创建对象时,它应该添加到MyMenuList中 你介意告诉我正确的方法吗 我的菜单类属性 可能有很多逻辑错误,因为我是新手。但当我看到反对票时。这让我很难过。顺便说一句,我描述我的语言太低了。你的MyMenuList和计数器应该是MyMenu类的静态成员。 我不知道你会使用什么MyMenuList列表,这样根本没有意义。每个实例的列表中只有一项;它本身此外,引用抽象类的子类型也没有意义。您应该有一个菜
- Id参数将自动增加
- 当我创建对象时,它应该添加到MyMenuList中
可能有很多逻辑错误,因为我是新手。但当我看到反对票时。这让我很难过。顺便说一句,我描述我的语言太低了。你的
MyMenuList
和计数器应该是MyMenu
类的静态成员。
我不知道你会使用什么MyMenuList
列表,这样根本没有意义。每个实例的列表中只有一项;它本身此外,引用抽象类的子类型也没有意义。您应该有一个菜单属性的列表,而不是MyMenu
。如果我错了,请纠正我
public abstract class MenuProperties
{
private static byte LastId = 0;
public static List<MenuProperties> MyMenuList { get; } = new List<MenuProperties>();
public byte Id { get; }
public string MenuName { get; set; }
public bool IsSubMenu { get; set; }
protected MenuProperties()
{
Id = LastId++;
}
public abstract void AddMenu(MenuProperties menu);
public abstract void DeleteMenu(MenuProperties menu);
}
public class MyMenu : MenuProperties
{
public MyMenu()
{
//This was not a Stack overflow, the MyMenuList was null; you didn't initialise it.
MyMenuList.Add(this);
}
public override void AddMenu(MenuProperties menu)
{
MyMenuList.Add(menu);
}
public override void DeleteMenu(MenuProperties menu)
{
MyMenuList.Remove(menu);
}
public override string ToString()
{
return Id.ToString() + " " + MenuName;
}
}
公共抽象类菜单属性
{
私有静态字节LastId=0;
公共静态列表MyMenuList{get;}=new List();
公共字节Id{get;}
公共字符串菜单名{get;set;}
公共bool IsSubMenu{get;set;}
受保护的菜单属性()
{
Id=LastId++;
}
公共摘要无效添加菜单(菜单属性菜单);
公共摘要无效删除菜单(菜单属性菜单);
}
公共类MyMenu:菜单属性
{
公共菜单()
{
//这不是堆栈溢出,MyMenuList为null;您没有初始化它。
MyMenuList.Add(这个);
}
公共覆盖无效添加菜单(菜单属性菜单)
{
添加(菜单);
}
公共覆盖无效删除菜单(菜单属性菜单)
{
MyMenuList.Remove(菜单);
}
公共重写字符串ToString()
{
返回Id.ToString()+“”+菜单名;
}
}
你能展示使用这些类的代码吗?我添加了它,但我变得士气低落。我使用了抽象的bcs,可以嵌套菜单。我不想对每个类都使用相同的属性。例如-Default-Home-Settings>-Add-menu->Remove-menu->menu-type->Remove->Editable等等。我并没有说不要使用抽象基类,但你用错了
static void Main(string[] args)
{
MyMenu menu = new MyMenu
{
Id = 0,
IsSubMenu = false,
MenuName = "Default",
};
MyMenu menu1 = new MyMenu
{
Id = 1,
IsSubMenu = false,
MenuName = "Home",
};
MyMenu menu2 = new MyMenu
{
Id = 2,
IsSubMenu = false,
MenuName = "Settings",
};
MyMenu menu3 = new MyMenu
{
Id = 3,
IsSubMenu = true,
MenuName = "Add Menu",
};
MyMenu menu4 = new MyMenu
{
Id = 4,
IsSubMenu = true,
MenuName = "Remove Menu",
};
menu.AddMenu(menu);// I wanna just remove this methods
menu1.AddMenu(menu1);// But When I create object from MyMenu class
menu2.AddMenu(menu2);// I wanna add this object to any list when
menu3.AddMenu(menu3);// its created.
menu4.AddMenu(menu4);// I am thinking, it can be in ctor
//But I am taking error.
Console.ReadLine();
}
public abstract class MenuProperties
{
private static byte LastId = 0;
public static List<MenuProperties> MyMenuList { get; } = new List<MenuProperties>();
public byte Id { get; }
public string MenuName { get; set; }
public bool IsSubMenu { get; set; }
protected MenuProperties()
{
Id = LastId++;
}
public abstract void AddMenu(MenuProperties menu);
public abstract void DeleteMenu(MenuProperties menu);
}
public class MyMenu : MenuProperties
{
public MyMenu()
{
//This was not a Stack overflow, the MyMenuList was null; you didn't initialise it.
MyMenuList.Add(this);
}
public override void AddMenu(MenuProperties menu)
{
MyMenuList.Add(menu);
}
public override void DeleteMenu(MenuProperties menu)
{
MyMenuList.Remove(menu);
}
public override string ToString()
{
return Id.ToString() + " " + MenuName;
}
}