为了在程序中添加更多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
亲切的问候
答案 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 [] []类型。