在 C# 中是不是可以用值实例化一个类? [关闭]

Posted

技术标签:

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

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

【问题讨论】:

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

但是,请选择比MyClassMyArray 更好的名称。真实姓名必须提供信息。一个类可以命名为StudentVehicleInvoice。该数组可以命名为GradesPassengersInvoiceLineItems

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

【讨论】:

以上是关于在 C# 中是不是可以用值实例化一个类? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

同一指令中的类实例化和方法? [关闭]

C#为啥接口可以实例化一个实现该接口的类?

c# 中类的实例化

C#中能否在类的内部实例化一个本类的对象?

C#中静态方法和实例化方法的区别

c#中接口可不可以被实例化?