【问题标题】:In C# is it possible to instantiate a class with a value? [closed]在 C# 中是否可以用值实例化一个类? [关闭]
【发布时间】:2019-09-12 16:00:06
【问题描述】:

在 C# 中是否可以用值实例化一个类?也就是说如果一个类包含一个数组,是否可以创建一个类,在类实例化时传递所需数组的长度?

【问题讨论】:

  • 当然,为什么不呢。你看过constructors吗?
  • @RoyiNamir - 我投反对票的原因是因为这没有显示任何研究工作。就我个人而言,我不认为一个简单的“这可能吗?”如果问题没有代表提问者表现出任何努力(原因是向下投票箭头的工具提示之一),那么问题是一个非常明确的问题。想提一下我的推理可能会让 OP 知道......

标签: c# arrays class instantiation


【解决方案1】:

是的。

最明显的方式是使用类的构造函数:

class X
{
    public int[] MyArray
    {
         get;
         set;
    }

    public X(int arrayLength)
    {
         MyArray = new int[arrayLength];
    }
}

您现在可以使用以下方法对其进行实例化:

X myX = new X(5);

您还可以使用它的属性实例化一个类:

class X
{
    public int[] MyArray
    {
         get;
         set;
    }

    public int ArrayLength
    {
        set
        {
             MyArray = new int[value];
        }
    }
}

并调用如下:

X myX = new X { ArrayLength = 5};

我会选择第一个选项...

【讨论】:

  • 传递所需数组的*length*。不是数组本身
  • 我修改了答案。
  • 感谢您的快速回答。我用谷歌找不到它。我以前真的从未见过,但我认为这是可能的。
【解决方案2】:

是的

public class MyClass
{
    private readonly string[] _myArray;

    public MyClass(int arrayLength)
    {
        _myArray = new string[arrayLength];
    }
}


var myClass = new MyClass(5);

【讨论】:

    【解决方案3】:

    您可以将长度作为构造函数参数传递。构造函数看起来像一个与类同名的方法,但没有返回类型(甚至没有void)。

    public class MyClass
    {
        public MyClass(int arrayLength)
        {
            MyArray = new string[arrayLength];
        }
    
        public string[] MyArray { get; }
    }
    

    此解决方案仅使用 getter 属性。您可以在构造函数中或使用属性初始化器对其进行初始化,但是一旦创建了对象,它就是只读的。

    您可以像这样创建MyClass 对象:

    var obj = new MyClass(10);
    string firstElementOfArray = obj.MyArray[0];
    string lastElementOfArray = obj.MyArray[9];
    

    但是,请选择比MyClass 或MyArray 更好的名称。真实姓名必须提供信息。一个类可以命名为Student 或Vehicle 或Invoice。该数组可以命名为Grades、Passengers 或InvoiceLineItems。

    但根据您的要求,该数组可能只是一个私有字段,无法从类外部访问。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-12
      • 1970-01-01
      • 2016-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多