为了在程序中加入更多的oop,我打算让一个类(对象)中的一个私有实例变量可以被一个类访问。
私有字节J;
所有这些代码都引用了这个锯齿数组。
现在在另一个类中,我将所有的for循环与consolewritline放在一起,以显示所需的结果。它的基本意思是“名称J在当前上下文中不存在”
但是我如何让这个J变得可访问呢?
我已经尝试过get和set,但是我一直收到'cannot convert to byte to byte‘的提示
另外,对于get和set,我需要什么样的cyntax?
像这样的东西?或者我还需要几个步骤?:
public Byte JArray
get { return J; } //can converrt to byte here
set { J = value; } //cannnot convert to byte here亲切的问候
发布于 2010-05-06 00:51:01
如果要通过属性公开变量,则属性的类型必须与变量的类型相同(或兼容):
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; }
}这将只允许调用者访问实际的元素,隐藏了它是由一个数组支持的事实。
直接暴露一个数组通常不是一个好主意--事实上,leading consider arrays to be somewhat harmful。
发布于 2010-05-06 00:47:59
如果我理解正确的话,问题是你的类型不匹配。
由于变量的类型为byte[][] (即字节数组的数组),因此您的属性的返回类型需要为byte[][]。目前它是Byte。
发布于 2010-05-06 00:48:33
这是因为您的私有变量和公共属性的类型不同。试试这个:
public byte[][] JArray
{
get { return J; }
set { J = value; }
}或者更短的使用自动属性:
public byte[][] JArray { get; set; }https://stackoverflow.com/questions/2775159
复制相似问题