我有一个C#类库项目,需要在其中包含结构,但不应该暴露在它之外的任何东西。因此,我使用internal关键字创建了一个struct,如下所示:
internal struct MessageInfo {
internal bool IsSticky;
internal bool IsImportant;
internal int MessageID;
internal int AuthorID;
internal int Sort;
internal string Title;
internal string Body;
internal DateTime DisplayFromDate;
internal DateTime DisplayToDate;
};
这编译并运行正常,但Visual Studio 2013(Ultimate,如果这很重要)会抛出编译器警告,例如:
warning CS0649: Field 'VNCM4.AjaxPages.MessageInfo.IsSticky' is never assigned to, and will always have its default value false
我发现如果我将'internal'关键字的所有实例更改为'public',警告就会消失。但是,我宁愿不这样做,因为为了抑制警告而必须公开它似乎很疯狂。
这是Visual Studio中的错误,还是我缺少的东西?我试过搜索这个确切的问题,但还没有找到任何内容。
提前感谢您的帮助!
答案 0 :(得分:7)
如果结构是内部的,并且值永远不会分配给整个程序集中的任何位置,那么编译器知道该值从未使用过,并且可以显示您看到的警告。如果它是公共的,那么其他程序集引用这个程序集(当然编译器无法知道)可以写入该结构的字段,因此即使该程序集没有写入它,警告也不适用。
编译器只能提供帮助,并在struct
为internal
时向您发出此警告。