从部分类访问类字段
Posted
技术标签:
【中文标题】从部分类访问类字段【英文标题】:Access class fields from partial class 【发布时间】:2010-11-09 11:14:20 【问题描述】:我目前处于必须使用部分类的场景中。 在这个部分类中,我有一些方法需要处理其他类中的字段。
例如
编辑:对不起:第一堂课已经被声明为partial
!
public partial class myClass
private string _myString;
public string myString
get return _myString;
set _myString = value;
和
public partial class myClass
public void doSomething()
myString = "newString";
编译器说 myString
在部分类中不存在!
我该如何克服这个问题?
【问题讨论】:
【参考方案1】:一个常见的问题是部分类位于不同的命名空间中。命名空间是类名的一部分,namespace1.myClass
和 namespace.a.myClass
作为两个完全独立的类处理。
根据MSDN, 部分类的每个部分应该:
具有partial
修饰符
具有相同的类名
在同一个命名空间中
在同一个程序集或 DLL 中
具有相同的可见性(如公共、私有等)
【讨论】:
【参考方案2】:您需要用您发布的代码修复一些问题:
在 C# 中使用分部类时,类的所有部分必须声明为分部类
你有:
public class myClass
public partial class myClass
需要变成:
public partial class myClass
public partial class myClass
其次,您尝试设置:
myString="newString";
但是myString
是一个没有setter 的公共属性。
所以要么你在声明myString
时添加一个setter:
public string myString
get return _myString;
set _myString = value;
或者直接使用:
_myString="newString";
在您的第二个部分类文件中。
【讨论】:
【参考方案3】:当我将您的代码放入 Visual Studio 时,我得到了一个不同的错误:
myString = "newString";
Error Property or indexer 'ConsoleApplication1.Program.myClass.myString' cannot be assigned to -- it is read only
如果我把它改成这个,它工作正常:
_myString = "newString";
编辑:
您不需要在两个宫殿中都将一个类标记为部分,这样编译得很好:
public class myClass
private string _myString;
public string myString
get return _myString;
public partial class myClass
public void doSomething()
_myString = "newString";
【讨论】:
虽然它可能编译得很好,但在文档中它说它是必需的。无论如何,这样做可能是一个好主意,以保持一致和未来的证明。 我只是按照表单设计器的操作...调皮的 winForms 设计器! 我遇到了同样的问题,直到我注意到我的方法是静态的。呵呵!【参考方案4】:假设两个声明都引用同一个命名空间,你的第一个声明不包含 partial 关键字:
使用 partial 关键字表示 类的其他部分,结构, 或者接口可以定义在 命名空间。所有部件都必须使用 部分关键字。所有部件都必须 可在编译时形成 最后的类型。所有部件必须 具有相同的可访问性,例如 public、private 等等。public、private 等等。
http://msdn.microsoft.com/en-en/library/wa80x488(v=VS.80).aspx
【讨论】:
【参考方案5】:您只需在两个处将班级标记为partial
,而不仅仅是其中一个。
【讨论】:
以上是关于从部分类访问类字段的主要内容,如果未能解决你的问题,请参考以下文章
Java中,内部类的概述和内部类的访问特点和内部类的分类(内部类的位置)