全局类实例化

4

我仍在尝试了解C#(主要使用C)。我有一个类“Device”,想创建该类的实例,但也想全局访问这些实例,因为我在GUI方法中经常使用它们。

 public class Device
    {
        public string Name;
        public List<string> models = new List<string>();
        public List<string> revisions = new List<string>();
        ...
    }

在全局范围内声明如下内容:
 Device Device1 = new Device();
 Device1.Name = "Device1";

然后在 WPF 方法中稍后访问它:

 private void DeviceViewItem_Selected(object sender, RoutedEventArgs e)
    {
       TreeViewItem selected = (TreeViewItem)sender;

        if (selected.Name == Device1.Name)
        {
            Device1.Models.Add("something");
            Device1.Revisions.Add("something");
        }

我一直在研究单例模式,但它似乎需要创建一个单例类,而我的“设备”类被多次使用以创建许多设备。也许我对这种模式理解不足。


3
你正在寻找 static。该词通常表示“静态”的意思。 - SLaks
如果您需要多个单例模式,可以了解一下多例模式 - Curtis Rutland
1个回答

9

创建一个新实例并将其分配给静态属性或字段:

public class AnyClass
{
    public static readonly Device ThisFieldCanBeReachedFromAnywhere = new Device();
}

请注意,AnyClass类不一定要是静态的(但这意味着所有成员必须是静态的)。
另外请注意,readonly关键字并非必需,但对于单例模式来说是个好习惯(就像Mark在他的评论中建议的那样)。

5
可能还会将其设置为只读。这在单例模式中很常见。 - MJM
LightBricko,正是我需要的。我到处寻找并发现了静态成员,但没有想到以静态方式创建新实例。谢谢! - DevynB
@Mark 感谢提到 readonly。肯定要坚持良好的实践;) - DevynB

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接