C#{get;set;}

get,set可以理解为两个方法;分别是对于变量的“取”与“赋值”,尤其是当该变量在类中是私有变量,不希望被访问,或者该变量会被很多其他的方法使用,修改起来会十分便利。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            NameSet ns = new NameSet("age","name");
           // ns.Age = "1";
            Console.WriteLine(ns.Age);
            Console.WriteLine(ns.Name);
            Console.Read();

        }
    }
    class NameSet
    {
        private string name;
        private string age;
        public string Name
        {
            get { return name; }
            set { name = value; }
        }
        public NameSet(string age,string name)
        {
            this.name = name;
            this.age = age;
        }
        public string Age
        { 
            get { return age + "haode"; }
            set { age = value + "shezhe"; }
        }

      }
}

在这里插入图片描述

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            NameSet ns = new NameSet("age","name");//这里是通过构造函数直接赋值,没有对Age方法中的变量赋值;
            ns.Age = "1";//首先对变量进行set赋值;
            Console.WriteLine(ns.Age);//这里使用get取值;
            Console.WriteLine(ns.Name);
            Console.Read();

        }
    }
    class NameSet
    {
        private string name;
        private string age;
        public string Name
        {
            get { return name; }
            set { name = value; }
        }
        public NameSet(string age,string name)
        {
            this.name = name;
            this.age = age;
        }
        public string Age
        { 
            get { return age + "haode"; }
            set { age = value + "shezhe"; }
        }

      }
}

在这里插入图片描述

C#中,`get` 和 `set` 主要用于属性的定义,它们为类的字段提供了封装和访问控制的机制。 ### 使用方法 #### 读写属性 同时带有 `get` 和 `set` 访问器的属性为读写属性。以下是一个简单的示例: ```csharp class ExampleClass { private int privateField; // 私有的变量 public int PublicProperty // 公有属性,用于获取和设置私有变量的值 { get { return privateField; } set { privateField = value; } } } ``` 在上述代码中,`PublicProperty` 是一个公有属性,通过 `get` 访问器可以获取 `privateField` 的值,通过 `set` 访问器可以设置 `privateField` 的值,其中 `value` 是 `set` 访问器的隐式参数,代表要赋予的值 [^2]。 #### 只读属性 只包含 `get` 访问器的属性为只读属性,外部代码只能获取该属性的值,不能设置。示例如下: ```csharp class ReadOnlyExample { private int readonlyField = 10; public int ReadOnlyProperty { get { return readonlyField; } } } ``` 在这个例子中,`ReadOnlyProperty` 是只读属性,外部无法修改 `readonlyField` 的值,只能通过该属性获取其值。 #### 只写属性 只包含 `set` 访问器的属性为只写属性,不过这种情况相对较少使用。示例如下: ```csharp class WriteOnlyExample { private int writeOnlyField; public int WriteOnlyProperty { set { writeOnlyField = value; } } } ``` 在上述代码中,`WriteOnlyProperty` 是只写属性,外部代码只能设置 `writeOnlyField` 的值,不能获取。 ### 原理 编译器在处理C#中的属性时,会将属性转化为一对特殊的 `get` 和 `set` 访问器方法。例如,对于以下属性定义: ```csharp public class cls { private int book; public int Book { get { Console.WriteLine("dsf"); return book; } set { Console.WriteLine("aaa"); book = value; } } } ``` 编译器实际上会将其编译成两个方法,类似于以下定义: ```csharp public void set_Book(int value) { Console.WriteLine("aaa"); this.book = value; } public int get_Book() { Console.WriteLine("dsf"); return this.book; } ``` 当代码中使用 `obj.Book = 120;` 时,编译后实际上是调用 `obj.set_Book(120);`;当使用 `Console.WriteLine(obj.Book);` 时,编译后实际上是调用 `Console.WriteLine(obj.get_Book());` [^3]。 这种机制使得属性的使用看起来像是直接访问类的字段一样,但实际上是通过方法来控制对字段的访问,从而实现了对类的行为和状态的封装和公开 [^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值