C# 类将其自身的实例放置在类中的静态列表中
这是将实例存储在任何类都可以访问的列表中的常见方法。有没有更好的方法来实现这一点C# 类将其自身的实例放置在类中的静态列表中,c#,static,C#,Static,这是将实例存储在任何类都可以访问的列表中的常见方法。有没有更好的方法来实现这一点 class fish { string species = "Gold Fish"; int age = 1; public static list<fish> Listholder = new list<fish>(); Listholder.add(this); } 类鱼 { string species=“金鱼”; 智力年龄=1; 公共静态列表Listholder=新列表(
class fish
{
string species = "Gold Fish";
int age = 1;
public static list<fish> Listholder = new list<fish>();
Listholder.add(this);
}
类鱼
{
string species=“金鱼”;
智力年龄=1;
公共静态列表Listholder=新列表();
添加(本);
}
我想你想找到的是一种在某处存储全球可访问鱼类列表的方法。也就是说,要有一个鱼类的中央仓库,所有其他类都可以从中获取鱼类
如果是这样的话,还有其他方法,比如服务/。请记住,拥有一个可变的公共静态字段将使测试和重用变得更加困难。类具有属性 该类允许您创建对象
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");
创建对象后,可以创建对象列表列表
不是线程安全的,因此如果要从不同线程添加/删除fish,则应改用
例如:
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;
}
}
公共级鱼类
{
公共字符串种类{get;set;}
公共整数{get;set;}
private static System.Collections.Concurrent.ConcurrentBag水族馆=新系统.Collections.ConcurrentBag();
静态鱼()
{
var goldFish=新鱼{Age=1,Species=“goldFish”};
Putfishinto水族馆(金鱼);
}
公共静态鱼缸(鱼类)
{
水族馆。添加(鱼);
}
公共静态真空透明水族馆()
{
鱼是鱼;
而(!水族馆,我是空的)
{
trytakefishoutofquarium(取出一些鱼);
}
}
公共静态bool trytakefishoutofquarium(out Fish)
{
如果(水族馆,试食(鱼))
返回true;
返回false;
}
公共静态bool TryLookAtSomeFish(室外鱼)
{
if(水族馆锥鱼(外出鱼类))
返回true;
返回false;
}
}
list
如果你指的是BCL,那么必须是list
,而根据MS编码标准,fish
应该是fish
。你有一堆鱼,任何类都可以访问,这本身就是一个巨大的危险信号,听起来不适合我。这些鱼具体是什么?为什么每个人都需要访问它?为了澄清,请更新问题,描述您希望其他类如何使用ListHolder
。除了其他人指出的关于姓名的内容外,请注意您的列表持有者
不是列表持有者,而是列表本身fishes
或fishList
是更好的名称。+1到@Servy-只是因为你的评论很搞笑!布莱恩:我想这只是你问题的一个简单例子,因为你的类中甚至没有任何构造函数、方法等。你的想法应该行得通——不过,关于它有多普遍。。。也许如果你解释一下你想做什么,我们可以提供一些“最佳实践”的替代方案。这是一个例子,我正在使用一个系统,每个国家的上校和队长都有自己的静态列表。可以被unity中的特定游戏对象访问。我的目标是不违反封装规则,但有时遵循这些规则会影响游戏的性能。OP不希望创建任意的列表
,他希望有一个新的Fish
自动添加到列表中。我认为OP需要创建一个不同的功能来将Fish
或船长添加到列表中,并且列表需要是一组预先制作的对象。比如说,当游戏中的某个人达到某个级别时,他需要游戏/应用程序创建一个新的fish/captain
,并将其添加到列表中。这需要一个不同的过程,或者当其他团队成员完成游戏的一些重要部分时,会执行类似的过程。感谢您的建议,其他团队成员可能需要知道,此类课程和船长/鱼类
列表可供他们使用。您可能应该立即设置这些内容,并向他们提供他们的in/out
场景;设置代码>我写自己的代码已经有一段时间了,现在我正在修复别人的代码已经有一段时间了。