【问题标题】:How to make a list of classes publicly accessible?如何使课程列表可公开访问?
【发布时间】:2013-02-28 19:04:19
【问题描述】:

我希望可以从任何地方访问如下对象列表,据我所知,这是一个“单例”类。

public class Car
{
    public string Name;
    public string Color;
    public int Value;
}


List<Vehicle> carList = new List<Vehicle>();

Car jeep = new Car();
jeep.Name = "Jeep";
jeep.Color = "Red";
jeep.Value = 20000;

Vehicle.Add(jeep);

这样我就可以在 Windows 窗体应用程序中的任何位置访问和修改它,使用类似按钮单击以下内容:

MessageBox.Show(Vehicle[0].name)

我错过了一些东西。如何将列表车辆公开?

【问题讨论】:

标签: c# class public


【解决方案1】:

鉴于您所展示的内容,单例模式现在对您来说似乎有点多。如果您不同意,请告诉我们,我们会为您指明正确的方向,现在,请尝试以下操作:

public class AcessStuff
{
  public static List<Vehicle> CarList = new List<Vehicle>();
}

你可以这样访问它:

private void SomeFunction()
{
  MessageBox.Show(AcessStuff.CarList[0].Name)
}

【讨论】:

  • 猜我不应该在这里链接代码。我有一个“汽车”类和你建议的“AccessStuff”类。公共静态列表 CarList = 新列表();在哪里可以为列表赋值?
【解决方案2】:

如果您希望您的列表为readonly,那么您只需提供getter

public class Vehicles
{
    private static readonly List<Vehicle> _vehicles = new List<Vehicle>();

    public static List<Vehicle> Instance { get { return _vehicles; } }
}

【讨论】:

    【解决方案3】:

    其实单身我会参考这个link

    这是一个版本:

    public sealed class Singleton
     {
         private static readonly Singleton instance = new Singleton();
    
         // Explicit static constructor to tell C# compiler
         // not to mark type as beforefieldinit
         static Singleton()
         {
         }
    
         private Singleton()
         {
         }
    
         public static Singleton Instance
         {
             get
             {
                 return instance;
             }
         }
     }
    

    许多程序员认为使用静态是有害的,通常这是一个糟糕设计的标志。你真的需要一个单例来访问你的类和对象吗?

    【讨论】:

      【解决方案4】:

      您可以通过两种方式完成此操作。

      一种是在您的项目中创建一个Data.cs 文件,您可以在其中放置所有全局应用程序数据。例如:

      Data.cs

      public static class ApplicationData
      {
          #region Properties
      
          public static List<Vehicle> CarList
          {
              get
              {
                  return ApplicationData._carList;
              }
          }
          private static List<Vehicle> _carList = new List<Vehicle>();
      
          #endregion
      }
      

      二是在你的窗口类中创建变量carList。例如:

      public class MyWindow : Window
      {
          #region Properties
      
          public List<Vehicle> CarList
          {
              get
              {
                  return this._carList;
              }
          }
          private List<Vehicle> _carList = new List<Vehicle>();
      
          #endregion
      
          /* window stuff */
      }
      

      【讨论】:

        【解决方案5】:

        只使用静态对象

         public static List<string> vehicles =new  List<string> ();
        

        静态类和类成员用于创建无需创建类实例即可访问的数据和函数。静态类成员可用于分隔独立于任何对象身份的数据和行为:无论对象发生什么,数据和函数都不会改变。当类中没有依赖于对象标识的数据或行为时,可以使用静态类。

        【讨论】:

          猜你喜欢
          • 2021-04-09
          • 2014-09-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-10-09
          • 1970-01-01
          • 2021-08-05
          • 2018-12-12
          相关资源
          最近更新 更多