加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

我不理解C#get的用法;组;似乎与Java不同

发布时间:2020-12-16 10:11:57 所属栏目:百科 来源:网络整理
导读:我知道有关于堆栈溢出的一些问题已经存在,但我没有找到任何回答我的具体问题.我来自 java开发背景,从不打扰使用get;组;从C#到现在的方法. 我有以下代码 class Test{ public int test { get; set; }} 在我的主要功能中,我可以声明一个新的测试并使用t.Test =
我知道有关于堆栈溢出的一些问题已经存在,但我没有找到任何回答我的具体问题.我来自 java开发背景,从不打扰使用get;组;从C#到现在的方法.

我有以下代码

class Test
{
    public int test { get; set; }
}

在我的主要功能中,我可以声明一个新的测试并使用t.Test = 5并且工作正常;但是,当我将公众切换到私人时,我无法访问我的获取;并设定;方法……但是当我使用时(与Java类似的方法)

class Test
{
    private int test;

    public int getTest()
    {
        return this.test;
    }

    public void setTest(int test)
    {
        this.test = test;
    }
}

我对设计理念感到困惑.在C#中我应该不再使用私有变量(只有在类内部使用时才将其设为私有)并将它们全部公开并使用私有get;私人集;控制可访问性?

解决方法

当你写这篇文章时(为了清楚起见,我使用了不同的类和属性名称):

public class Test
{
    public string Name { get; set; }
}

那是要求编译器创建一个带有公共属性的私有字段.它相当于:

public class Test
{
    private string name;
    public string Name
    {
        get { return name; }
        set { name = value; }
    }
}

(字段名称是自动生成的,不能直接在C#中表示.)

这基本上相当于你用Java编写的内容:

// Java
public class Test {
    private String name;

    public String getName() {
        return name;
    }

    public String setName(String name) {
        this.name = name;
    }
}

……但很明显C#更紧凑.

基本上,C#的属性使得代码比使用getter和setter方法作为常规方法更具可读性 – 但实际上它们就是这样.它们在代码中的使用方式不同.自动实现的属性(根据第一个片段)使“简单”属性更易于表达.在C#6中,您也可以编写只读自动实现的属性,这些属性可以从构造函数中分配,但只能分配给构造函数.

但重要的是,您仍然只是将属性作为公共API的一部分 – 而不是字段.因此,如果您以后想要添加更多逻辑(例如,从同一字段派生两个属性,或类似的东西),您可以这样做,而不会影响源或二进制兼容性.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读