首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使私有实例变量可访问的C# (锯齿数组)

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

Stack Overflow用户
提问于 2010-05-06 00:44:54
回答 4查看 459关注 0票数 0

为了在程序中加入更多的oop,我打算让一个类(对象)中的一个私有实例变量可以被一个类访问。

私有字节J;

所有这些代码都引用了这个锯齿数组。

现在在另一个类中,我将所有的for循环与consolewritline放在一起,以显示所需的结果。它的基本意思是“名称J在当前上下文中不存在”

但是我如何让这个J变得可访问呢?

我已经尝试过get和set,但是我一直收到'cannot convert to byte to byte‘的提示

另外,对于get和set,我需要什么样的cyntax?

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

代码语言:javascript
复制
public Byte JArray
get { return J; }  //can converrt to byte here
set { J = value; } //cannnot convert to byte here

亲切的问候

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-05-06 00:51:01

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

代码语言:javascript
复制
public byte[][] JArray
{
    get { return J; }
    set { J = value; }
}

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

即使这样,调用者仍然可以更改“外部”数组的内容,一次更改整个“列”:

代码语言:javascript
复制
foo.JArray[10] = new byte[10];

另一种方法是将索引器添加到类中:

代码语言:javascript
复制
public byte this[int x, int y]
{
    get { return J[x][y]; }
    set { J[x][y] = value; }
}

这将只允许调用者访问实际的元素,隐藏了它是由一个数组支持的事实。

直接暴露一个数组通常不是一个好主意--事实上,leading consider arrays to be somewhat harmful

票数 12
EN

Stack Overflow用户

发布于 2010-05-06 00:47:59

如果我理解正确的话,问题是你的类型不匹配。

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

票数 1
EN

Stack Overflow用户

发布于 2010-05-06 00:48:33

这是因为您的私有变量和公共属性的类型不同。试试这个:

代码语言:javascript
复制
public byte[][] JArray
{
    get { return J; }
    set { J = value; }
}

或者更短的使用自动属性:

代码语言:javascript
复制
public byte[][] JArray { get; set; }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2775159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档