簡體   English   中英

在C#中引用嵌套類對象

[英]Referencing nested class objects in C#

我希望有一個包含多個嵌套類的類,這樣當我創建一個新的父類時,每個嵌套類的對象都會被創建,我可以全局引用每個嵌套類中的變量。

這是我目前的代碼:

public class StockChecklist
{
  public class qty1p1 { public string tag = "uniqueval23456"; public string value = ""; public string reference = ""; }
  public class qty1p2 { public string tag = "uniqueval3736"; public string value = ""; public string reference = ""; }

  public class qty2 { public string tag = "uniqueval97357"; public string value = ""; public string reference = ""; }

  public class qty3p1 { public string tag = "uniqueval88356"; public string value = ""; public string reference = ""; }
  public class qty3p2 { public string tag = "uniqueval62346"; public string value = ""; public string reference = ""; }
  public class qty3p3 { public string tag = "uniqueval09876"; public string value = ""; public string reference = ""; }
  public class qty3p4 { public string tag = "uniqueval62156"; public string value = ""; public string reference = ""; }

  public class qty4 { public string tag = "uniqueval25326"; public string value = ""; public string reference = ""; }

}

然后我創建一個新的父對象:

StockChecklist theCurrentList = new StockChecklist();

但是如何訪問嵌套對象'tag','value'和'reference'? 我希望像StockChecklist.qty1p1.tag ='changedval999999999'這樣簡單的東西;

C#可以這樣嗎?

你混淆了定義聲明 定義嵌套類不會創建實例。 您定義的類看起來都使用相同的屬性。 因此,您應該定義一個類並聲明多個實例。

你可以解決這個問題:

C#6.0

public class Info
{
    public string tag { get; set; }
    public string value { get; set; }
    public string reference { get; set; }

}

public class StockChecklist
{
    public Info qty1p1 { get; } = new Info { tag = "uniqueval23456", value = "", reference = "" };
    public Info qty1p2 { get; } = new Info { tag = "uniqueval3736", value = "", reference = "" };

    public Info qty2 { get; } = new Info { tag = "uniqueval97357", value = "", reference = "" };

    public Info qty3p1 { get; } = new Info { tag = "uniqueval88356", value = "", reference = "" };
    public Info qty3p2 { get; } = new Info { tag = "uniqueval62346", value = "", reference = "" };
    public Info qty3p3 { get; } = new Info { tag = "uniqueval09876", value = "", reference = "" };
    public Info qty3p4 { get; } = new Info { tag = "uniqueval62156", value = "", reference = "" };
    public Info qty4 { get; } = new Info { tag = "uniqueval25326", value = "", reference = "" };
}

在C#6.0之前,您必須在構造函數中創建實例。

public class StockChecklist
{

    public StockChecklist()
    {
        qty1p1 = new Info { tag = "uniqueval23456", value = "", reference = "" };
        qty1p2 = new Info { tag = "uniqueval3736", value = "", reference = "" };

        qty2 = new Info { tag = "uniqueval97357", value = "", reference = "" };

        qty3p1 = new Info { tag = "uniqueval88356", value = "", reference = "" };
        qty3p2 = new Info { tag = "uniqueval62346", value = "", reference = "" };
        qty3p3 = new Info { tag = "uniqueval09876", value = "", reference = "" };
        qty3p4 = new Info { tag = "uniqueval62156", value = "", reference = "" };
        qty4 = new Info { tag = "uniqueval25326", value = "", reference = "" };
    }

    public Info qty1p1 { get; private set; }
    public Info qty1p2 { get; private set; }

    public Info qty2 { get; private set; }

    public Info qty3p1 { get; private set; }
    public Info qty3p2 { get; private set; }
    public Info qty3p3 { get; private set; }
    public Info qty3p4 { get; private set; }
    public Info qty4 { get; private set; }
}

注意:就像已經注意到的一些評論一樣,在一個類中聲明同一個類的8個實例可能會指向“糟糕”的設計。 你可以為它創建一個Dictionary<>


這是一個字典版本:( 獎金)

public class Info
{
    public string tag { get; set; }
    public string value { get; set; }
    public string reference { get; set; }

}

public class StockChecklist
{
    private Dictionary<string, Info> _infoDict = new Dictionary<string, Info>();

    private void AddToDict(Info info)
    {
        _infoDict.Add(info.tag, info);
    }

    public StockChecklist2()
    {
        AddToDict(new Info { tag = "uniqueval23456", value = "", reference = "" });
        AddToDict(new Info { tag = "uniqueval3736", value = "", reference = "" });
        AddToDict(new Info { tag = "uniqueval97357", value = "", reference = "" });
        AddToDict(new Info { tag = "uniqueval88356", value = "", reference = "" });
        AddToDict(new Info { tag = "uniqueval62346", value = "", reference = "" });
        AddToDict(new Info { tag = "uniqueval09876", value = "", reference = "" });
        AddToDict(new Info { tag = "uniqueval62156", value = "", reference = "" });
        AddToDict(new Info { tag = "uniqueval25326", value = "", reference = "" });
    }

    public bool TryGetByTag(string tag, out Info info)
    {
        return _infoDict.TryGetValue(tag, out info);
    }

    public Info this[string tag]
    {
        get
        {
            Info info;

            if (!_infoDict.TryGetValue(tag, out info))
                return null;

            return info;
        }
    }
}

使用它像: (C#6.0)

StockChecklist stock = new StockChecklist();
Info info;
if (stock.TryGetByTag("uniqueval23456", out info))
{
    Trace.WriteLine($"{info.tag} = {info.value}");
}

(C#6.0)

Trace.WriteLine(stock["uniqueval88356"]?.value);

你應該做這樣的事情:

  public class qty1p1 { public string tag = "uniqueval23456"; public string value = ""; public string reference = ""; }
  public class qty1p2 { public string tag = "uniqueval3736"; public string value = ""; public string reference = ""; }

  public class qty2 { public string tag = "uniqueval97357"; public string value = ""; public string reference = ""; }

  public class qty3p1 { public string tag = "uniqueval88356"; public string value = ""; public string reference = ""; }
  public class qty3p2 { public string tag = "uniqueval62346"; public string value = ""; public string reference = ""; }
  public class qty3p3 { public string tag = "uniqueval09876"; public string value = ""; public string reference = ""; }
  public class qty3p4 { public string tag = "uniqueval62156"; public string value = ""; public string reference = ""; }

  public class qty4 { public string tag = "uniqueval25326"; public string value = ""; public string reference = ""; }

public class StockChecklist
{
    public qty1p1 _qty1p1;
    public qty1p2 _qty1p2;
.
.
.
}

然后你可以使用它像:

StockChecklist theCurrentList = new StockChecklist();
theCurrentList._qty1p1.tag = 'changedval999999999';

你可以這樣做:

public class Parent
{

    public class child1 { public string name = "a"; public int Value = 1;}
    public class child2 { public string name = "b"; public int Value = 2;}
    public class child3 { public string name = "c"; public int Value = 3;}
    public class child4 { public string name = "d"; public int Value = 4;}
    public class child5 { public string name = "e"; public int Value = 5;}
    public child1 c1;
    public child2 c2;
    public child3 c3;
    public child4 c4;
    public child5 c5;
    public Parent() {
        this.c1 = new child1();
        this.c2 = new child2();
        this.c3 = new child3();
        this.c4 = new child4();
        this.c5 = new child5();
    }
}

class Program
{
    static void Main(string[] args)
    {

        Parent p1 = new Parent();
        Console.WriteLine(p1.c1.name);
        Console.WriteLine(p1.c2.name);
        Console.WriteLine(p1.c3.name);
        Console.WriteLine(p1.c4.name);
        Console.WriteLine(p1.c5.name);
        Console.ReadLine();

    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM