C#使私有实例变量可访问(锯齿状数组)

时间:2010-05-05 16:44:54

标签: c#

为了在程序中添加更多oop,我希望在一个可以访问类的类(对象)中创建一个私有实例变量。

private byte [] [] J;

所有这些代码都引用了这个锯齿状的数组 现在在另一个类中,我将所有for循环与控制台写入一起放置以显示想要的结果。基本上它说“当前上下文中不存在名称J” 但是我究竟如何使这个J可以访问?

我尝试过get和set但是我一直在'无法转换为字节到字节[] []'

我还需要什么样的cyntax来获取和设置?

像这样的东西?或者我还需要几个步骤? :

public Byte JArray
get { return J; }  //can converrt to byte here
set { J = value; } //cannnot convert to byte here

亲切的问候

4 个答案:

答案 0 :(得分:12)

如果要通过属性公开变量,则属性的类型必须与变量的类型(或兼容)相同:

public byte[][] JArray
{
    get { return J; }
    set { J = value; }
}

但是,您可能并不真正需要setter - 除非您确实希望调用者能够更改J以引用不同的锯齿状数组。只需使用getter,他们仍然可以在数组中更改值,但它们无法自行更改变量。

尽管如此,调用者仍然可以更改“外部”数组的内容,一次更改整个“列”:

foo.JArray[10] = new byte[10];

另一种方法是在您的类中添加索引器:

public byte this[int x, int y]
{
    get { return J[x][y]; }
    set { J[x][y] = value; }
}

这只会让调用者访问实际的元素,隐藏它由数组支持的事实。

直接公开数组通常是一个坏主意 - 事实上,引导思想consider arrays to be somewhat harmful

答案 1 :(得分:1)

如果我理解正确的情况,问题是您的类型不匹配。

由于变量的类型是byte[][](即字节数组数组),因此属性的返回类型需要为byte[][]。目前它是Byte

答案 2 :(得分:1)

那是因为你的私有变量和公共属性的类型不一样。试试这个:

public byte[][] JArray
{
    get { return J; }
    set { J = value; }
}

甚至更短的使用自动属性:

public byte[][] JArray { get; set; }

答案 3 :(得分:1)

如果J是byte [] []类型,则associate属性也应该是byte [] []类型。