0

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

class fish
{

string species = "Gold Fish";

int age = 1;

public static list<fish> Listholder = new list<fish>();

Listholder.add(this);

}
4

3 回答 3

3

List<T>不是线程安全的,所以如果你想从不同的线程中添加/删除鱼,你应该使用它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;
    }

}
于 2013-08-15T20:54:55.807 回答
0

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

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

于 2013-08-15T20:49:57.093 回答
-1

一个类有属性。

该类允许您创建对象。

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");

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

于 2013-08-15T20:53:40.210 回答