【发布时间】:2011-07-24 07:26:09
【问题描述】:
我是 C# 编程的新手,所以这可能是一个初学者的问题。
我在以下代码 sn-p 上收到 “'A.Test.That.Fails' is inaccessible due to its protection level” 错误,我无法理解原因。
namespace A
{
class Test
{
public void Demo()
{
That[] it = new That[42];
it[0].fails = 21;
}
public struct That
{
int fails;
}
}
}
来自 C++ 编程并阅读过保护规则几乎相同,因为只有一个类,即使 That 结构和 Demo 方法都是 private,我也希望它能够工作。
作为旁注,我们将非常感谢您提供指向 C++ 程序员范围和保护规则的总结页面的链接。
【问题讨论】:
-
A.Test.That.fails... 聪明。 +1 -
见科迪的回答; C#中的结构和类有很大的区别;事实上,它们几乎没有关系。大多数时候人们在 C# 中使用结构,这是不正确的。确保您出于正确的原因使用它。 “因为它是一个简单的对象”不是这样的理由。
-
@BoltClock: ;) @Marc: 将“因为我只想要一个快速的标量对数组”作为借口吗?
-
是的,我会这么说。不一定是因为它简单或快速,而是因为您需要这些标量对的值类型语义。它们应该像普通的
int一样工作,而不是像一个对象。它们是不可变的,这是合乎逻辑的。我也会为此选择一个结构。 -
切题:如果您不想要您的内部信息公开但无论如何都需要它们公开,
InternalsVisibleTo允许您创建一个内部类对特定的外部程序集可见。这对于单元测试非常有用。
标签: c# struct visibility protection