C# 如何通过一些进程在动态参数中创建对象?

C# 如何通过一些进程在动态参数中创建对象?,c#,initialization,C#,Initialization,当我从MyMenu类创建对象时,出现了几个错误 我想把它放在房间里 Id参数将自动增加 当我创建对象时,它应该添加到MyMenuList中 你介意告诉我正确的方法吗 我的菜单类属性 可能有很多逻辑错误,因为我是新手。但当我看到反对票时。这让我很难过。顺便说一句,我描述我的语言太低了。你的MyMenuList和计数器应该是MyMenu类的静态成员。 我不知道你会使用什么MyMenuList列表,这样根本没有意义。每个实例的列表中只有一项;它本身此外,引用抽象类的子类型也没有意义。您应该有一个菜

当我从MyMenu类创建对象时,出现了几个错误

我想把它放在房间里

  • 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;
    }
}