从部分类访问类字段

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.myClassnamespace.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,而不仅仅是其中一个。

【讨论】:

以上是关于从部分类访问类字段的主要内容,如果未能解决你的问题,请参考以下文章

PHP 商品分类

Java中,内部类的概述和内部类的访问特点和内部类的分类(内部类的位置)

arcgis手动分类怎么设置

tp3.2中怎么访问分类及子分类下面的文章

《分布式微服务电商》专题(十四)-电商项目商品类目后台页面访问

ios 分类