最远的你最近的爱 發表於 2020-3-1 13:34:00

c#值get、 set用法

<div id="content_views" class="htmledit_views">
<p align="left">&nbsp;在程序中经常碰到get、set,不甚明白,在网上查询时也说的迷迷糊糊,所以整理下,以学的明白透彻点。</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;有两个类person:</p>
<div class="cnblogs_code">
<pre>   <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> person
    {
      </span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)"> name;
    }
    </span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> person
    {
      </span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">string</span> Name{<span style="color: rgba(0, 0, 255, 1)">set</span>;<span style="color: rgba(0, 0, 255, 1)">get</span><span style="color: rgba(0, 0, 0, 1)">;}
    }</span></pre>
</div>
<p>&nbsp;</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;第一个类型的name属性未封装,其name属性直接通过public关键字暴露给系统中的其他类了,而第二个类型的name属性通过get set关键字进行了封装,get和set分别对应的是可读和可写,相当于如下代码:</p>
<div class="cnblogs_code">
<pre>    <span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)"> name;
    </span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)"> Name
    {
      </span><span style="color: rgba(0, 0, 255, 1)">get</span> { <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> name; }
     </span><span style="color: rgba(0, 0, 255, 1)">set</span> { name =<span style="color: rgba(0, 0, 0, 1)"> value; }
  }</span></pre>
</div>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;简单说下区别吧:当实例化第一个“person”这个类时,系统在分配内存空间时对name属性直接分配内存,之后对name属性的操作也是直接操作内存中name属性所在的这个块;而当实例化第二个“人”类型时,系统会先分配一个叫name的private私有的内存空间,之后的读与写的操作都是通过Name这个public的类似于指针的东西来关联name进行,以此达到封装的目的,并且通过get和set关键字也可以控制可读还是可写。建议用后者,封装的好处可以参考相关文档,不再累述了~</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;至于get和set的作用,除了控制读写之外还有其他的作用,举个简单的例子,比如说当我给Name赋值的时候想要先进行一些逻辑判断,就可以这样:</p>
<div class="cnblogs_code">
<pre>      <span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)"> name;
      </span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)"> Name
      {
            </span><span style="color: rgba(0, 0, 255, 1)">get</span> { <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> name; }
            </span><span style="color: rgba(0, 0, 255, 1)">set</span><span style="color: rgba(0, 0, 0, 1)">
            {
             name </span>= String.IsNullOrEmpty(value) ? <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">空</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> : value;
            }
      } </span></pre>
</div>
<p>再举例说明下:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;假设类是一银行,既能存钱也能取钱</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">    Private Money;
    Private </span><span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> bank()
    {
      </span><span style="color: rgba(0, 0, 255, 1)">get</span><span style="color: rgba(0, 0, 0, 1)">
      {
         </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> Money;
      }
      Set
      {
         Money</span>=<span style="color: rgba(0, 0, 0, 1)">value;
      }
    }</span></pre>
</div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;Money 就像银行里的自动取款机,你看不见里面的Money,但你能用set(存钱),用get(取钱)。Money是一个私有字段,是分装在类中的,类以外的程序不能直接访问的。C#中get、set用法中,类的set和get成员是外部程序访问类内部属性的唯一方法,就像你去银行取钱,你不能直接从银行的保险柜里拿钱,而是银行营业人员把钱取出来给你的。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;属性在调用者看来就像一个普通的变量,但作为类的设计者,你可以利用属性来隐藏你类中的一些字段,使外界只能通过属性来访问你的字段,你可以通过属性来限制外界对你的字段的存取,就利用get、set。如果想让用户随意存取你的字段,那么就实现get、set;如果只想让用户读取字段,就只实现get;若只想让用户写字段就只实现set。同时还可以在set和get中对用户传递的值进行一些验证工作,以确保你的字段将含有正确的值。</p>
<p>&nbsp; &nbsp;</p>
<div class="cnblogs_code">
<pre>    Private <span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> a;
    Public </span><span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> index
    {
      </span><span style="color: rgba(0, 0, 255, 1)">get</span><span style="color: rgba(0, 0, 0, 1)">
      {
         </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> a;
      }
      </span><span style="color: rgba(0, 0, 255, 1)">set</span><span style="color: rgba(0, 0, 0, 1)">
      {
         a </span>= value&lt;<span style="color: rgba(128, 0, 128, 1)">0</span> ? <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)"> : value ;
      }
    }</span></pre>
</div>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;可看出,get、set用法中一则是隐藏组件或类内部的真是成员;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;二是用来建立约束的,比如,实现“有我没你”这种约束;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;三是用来响应属性变化事件,当属性变化是做某事,只要写在set方法里就行。</p>
&nbsp;&nbsp;&nbsp;&nbsp;当你想读出或写入属性的值时,存取标志限定了被实现的语句。用于读出属性的值的存取标志记为关键字get,而要修改属性的值的读写符标志记为set。</div>
<div class="more-toolbox">
<div class="left-toolbox">
<ul class="toolbox-list">
<li class="tool-item tool-active is-like "><span class="name">点赞</span></li>
</ul>
</div>
</div><br><br>
来源:https://www.cnblogs.com/yuyexiaoxiao/p/12389407.html
頁: [1]
查看完整版本: c#值get、 set用法