C#中对象数组

C#中,Object[] arr = newObject[2];这句话实际上并没有为对象分配空间,实质上只是为arr分配了两个可以存放对象地址的空间(声明这个空间是用于存放何种类型的对象的),当实际上创建新的对象或把其他对象赋给数组中数据时,才真正让这个数组的数据完整存在。当然数值型数组,如int[] arrInt = new int[3];即使不赋初值也可以访问,托管内存上分配了存放int数据的空间。

例如

arr[0] =new Object();arr[1] = new Object();

或者假如arr1已经被赋值了,则 arr= arr1;(其中假如arr1中元素的个数小于arr中元素的个数,则arr数组中就不会填充满~,则未被赋值的元素是不能进行访问的)。

或者这个样子

for (int i = 0; i < arr.Length; ++i)
{
    arr[i] = arr1[i];
}


C#中引用的概念很普遍,因而利用该概念可以很好的实现浅拷贝~。在游戏开发中,可能会将对象传来传去,但是实质都要操作同一个对象,不必对其进行深拷贝。
C#的`PropertyGrid`控件是一个功能强大的组件,它允许用户通过属性编辑界面来查看和修改对象的属性。如果要在`PropertyGrid`显示对象数组,需要对数组的每个对象以及其属性进行一些特定的处理,因为`PropertyGrid`默认是设计来展示单个对象的属性的。 要在一个`PropertyGrid`显示对象数组,可以通过以下步骤进行: 1. 创建一个宿主对象,该对象包含了对象数组作为其属性之一。这样,`PropertyGrid`就可以显示宿主对象的属性,包括对象数组。 2. 使用`TypeConverter`属性来告知`PropertyGrid`如何显示对象数组。通常,可以使用`ExpandableObjectConverter`或者自定义`TypeConverter`来实现数组的展开和折叠。 3. 在宿主对象添加逻辑来处理对象数组的动态更改。比如,当`PropertyGrid`数组元素被修改时,可能需要更新数组内部的状态。 下面是一个简单的示例代码,展示如何在C#窗体应用程序使用`PropertyGrid`显示对象数组: ```csharp using System; using System.Collections; using System.ComponentModel; using System.Windows.Forms; public class MyObject { [Category("Data")] public string Name { get; set; } [Category("Data")] public int Value { get; set; } } public class MyObjectArrayContainer { private MyObject[] myObjects = new MyObject[3]; public MyObjectArrayContainer() { for (int i = 0; i < myObjects.Length; i++) { myObjects[i] = new MyObject { Name = "Object " + (i + 1), Value = i }; } } [TypeConverter(typeof(ExpandableObjectConverter))] public MyObject[] Objects { get { return myObjects; } } } public partial class Form1 : Form { public Form1() { InitializeComponent(); MyObjectArrayContainer container = new MyObjectArrayContainer(); PropertyGrid propertyGrid = new PropertyGrid(); propertyGrid.SelectedObject = container; this.Controls.Add(propertyGrid); } } ``` 在这个示例,`MyObject`类代表我们要在数组存储的对象。`MyObjectArrayContainer`类包含了一个`MyObject`数组,并且将这个数组标记为`TypeConverter(typeof(ExpandableObjectConverter))`,以便在`PropertyGrid`可以展开和查看每个数组元素。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值