类,将其自身的实例放置在该类中的静态列表中

本文关键字:列表 静态 实例 | 更新日期: 2023-09-27 18:28:00

这是将实例存储在任何类都可以访问的列表中的常用方法吗。有什么更好的技术可以做到这一点吗?

class fish
{
string species = "Gold Fish";
int age = 1;
public static list<fish> Listholder = new list<fish>();
Listholder.add(this);
}

类,将其自身的实例放置在该类中的静态列表中

List<T>不是线程安全的,所以如果您想添加/删除不同线程中的fish,应该使用ConcurrentBag<T>

例如:

public class Fish
{
    public string Species { get; set; }
    public int Age { get; set; }
    private static System.Collections.Concurrent.ConcurrentBag<Fish> Aquarium = new System.Collections.Concurrent.ConcurrentBag<Fish>();
    static Fish()
    {
        var goldFish = new Fish { Age = 1, Species = "Gold Fish" };
        PutFishIntoAquarium(goldFish);
    }
    public static void PutFishIntoAquarium(Fish fish)
    {
        Aquarium.Add(fish);
    }
    public static void ClearAquarium()
    {
        Fish someFish;
        while (!Aquarium.IsEmpty)
        {
            TryTakeFishOutOfAquarium(out someFish);
        }
    }
    public static bool TryTakeFishOutOfAquarium(out Fish fish)
    {
        if (Aquarium.TryTake(out fish))
            return true;
        return false;
    }
    public static bool TryLookAtSomeFish(out Fish fish)
    {
        if (Aquarium.TryPeek(out fish))
            return true;
        return false;
    }
}

我认为您想要获得的是一种将全局可访问的鱼类列表存储在某处的方法。也就是说,拥有一个所有其他类都可以从中获取鱼类的中央存储库。

如果是这样的话,还有其他方法可以做到这一点,比如服务/存储库模式。请记住,拥有可变的公共静态字段将使测试和可重用性更加困难。

类具有属性。

类允许您创建对象。

class fish()
{
    Private String _Type;
    Private Int _Age;
    Private String _Species;
    Public Type
    {
        get _Type;
        set _Type = Value;
    }
    Public Age
    {
        get _Age;
        set _Age = Value;
    }
    Public Species
    {
        get _Species;
        set _Species = Value;
    }
    public new(string Type, Int Age, String Species)
    {
        this.Type = Type;
        this.Age = Age;
        this.Species = Species;
    }
}
//this is your new object.
Fish SunFish = New Fish("small", 9, "Sunfish");

创建对象后,您可以创建对象列表