1. 程式人生 > >c#面向物件中的get和set的用法

c#面向物件中的get和set的用法

   面向物件程式設計的一個規則是:使使用者只需要指定物件能做什麼,而不需要去指定或者瞭解物件是如何完成該的。 
屬性是物件內部的資料,使用者如果能夠直接訪問物件內部資料,顯然就違反了上述規則。(這也有點類似Windows系統對記憶體的保護,可以通過API來操作,但不推薦直接訪問記憶體,那樣就可能把記憶體搞亂了。)
 通過get和set訪問器來訪問,就保持了這種規則,而且還提供了額外的功能,如對值進行檢查,實現只讀或只寫屬性等。
 總的來說就是可以通過set get 來對類的屬性進行封裝,面向物件的程式是不可以直接用類自己定義的屬性的

剛剛學C#的時候,很多人都不明白屬性的訪問器有什麼用呢,我上網見了不少的評論,拉下來給大家看看

一般面向物件程式語言都要求成員變數不能直接暴露給外部訪問,如下:
public class A
{
    public int Age;   //這是不好的,待會有程式設計師可能把-1賦給Age
}
為了防止亂賦值,C#設計了一個屬性機制,要求把成員變數設為私有,在通過屬性來控制成員變數的讀寫,如下:
public class B
{
    private int age;  //私有成員變數
    public int Age    //age的屬性
    {
        get{ return age; }  //讀取器
        set{                //寫入器
            if(value>0)
              age = value;   //value是準備寫入的值
        }
    }
}
這樣Age就像保安一樣,擋在age的前面。訪問age的時候需要通過Age許可,如下:
B b = new B();
b.Age = -1;  //這是不行的,-1被帶入value,value<0,判斷不成立
b.Age = 10;  //這是可行的 
如果還有不懂的話可以留言,我儘量教會你,下面是我一個簡單是例子
//-------------------------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication2
{
    public class Myclass
{
     private string id="";
     private string name="";
    public string ID
   {
            get
            {
              return id;
             }
            set
              {
                id =value;
             }
       }
      public string Name
       {
           get
            {
              return name;
             } 
            set  
              {
                name =value;
              }
        }
   }
    class Program
    {
        static void Main(string[] args)
        {
              Myclass clazz = new Myclass ();
                clazz.ID ="BH001";
                clazz.Name="MR01";
              Console.WriteLine(clazz.ID,clazz.Name);
              Console.ReadLine();
        }
      
    }
   
}

相關推薦

c#面向物件getset用法

   面向物件程式設計的一個規則是:使使用者只需要指定物件能做什麼,而不需要去指定或者瞭解物件是如何完成該的。 屬性是物件內部的資料,使用者如果能夠直接訪問物件內部資料,顯然就違反了上述規則。(這也有點類似Windows系統對記憶體的保護,可以通過API來操作,但不推薦直接訪問記憶體,那樣就可能把記

關於matlabgetset用法(轉)

通用函式get和set 所有物件都有屬性來定義它們的特徵,正是通過設定這些屬性來修正圖形顯示的方式。儘管許多屬性所有的物件都有,但與每一種物件型別(比如座標軸,線,曲面)相關的屬性列表都是獨一無二的。物件屬性可包括諸如物件的位置、顏色、型別、父物件、子物件及其它內容。每一個不同物件都有和它相關的屬性,可以改

flask getpost用法

get和post 1、get請求: 使用場景:如果只對伺服器獲取資料,並沒有對伺服器產生任何影響,那麼這時候使用get請求 傳參:get請求傳參是放在url中,並且是通過?的形式來指定key和value的 2、post請求: 使

C++面向物件程式設計——類物件(個人整理)

物件: object 客觀世界中任何一個事物都可以看成一個物件,如自然物體(汽車,房子,班級...) 可以看到一個班級作為一個物件有兩個要素: 1、班級所屬系和專業,人數等靜態特徵(屬性); 2、班

關於面向物件程式設計很多人用get()set()方法,而不用public的一點總結

在很多程式中,都喜歡定義一個privata變數,然後為這個私有變數加上get(),set()方法。那為什麼不直接定義一個public變數呢?這樣做到底有什麼好處和意義呢?難道真的僅僅只是為了程式碼規範?別逗了,不管你信不信,反正我是不信!帶著這個問題我在網上尋找答案,真是眾

《隨筆四》——C#的 “屬性索引器get set 訪問器的訪問修飾符”

屬性和索引器中的 get 和 set 訪問器的訪問修飾符 ●  索引器和屬性自帶 get 和 set 訪問器,  在預設的情況下:  如果一個屬性有public 訪問級別, 那麼它的那個兩個訪問器

Python基礎筆記_Day10_Python面向物件、類物件、__init__、__str__、訪問限制、setget

Day10_Python面向物件、類和物件、init、str、訪問限制、set、get 10.01_Python語言基礎(面向物件思想)(理解) 10.02_Python語言基礎(類和物件)(掌握) 10.03_Python語言基礎(類的構成)(掌握) 10.04_Python語言基礎(

C#GETSET訪問器

 我們在學習C#語法的屬性時,都要首先和GET,SET訪問器打交道,從英文的字面意思上理解,GET應該就是獲得什麼什麼,而SET應該是設定什麼什麼,那我們看一下,官方是怎麼定義這對訪問器的:get是讀取屬性時進行的操作,set是設定屬性時進行的操作。定義一個屬性如果只有ge

C#getset 方法

set()是給屬性賦值的,get()是取得屬性值的 被設定和存取的屬性一般是私有 主要是起到封裝的作用,不允許直接對屬性操作 set()和get()不一定同時存在,看程式需求 釋一:屬性的訪問器包含與獲取(讀取或計算)或設定(寫)屬性有關的可執行語句。 訪問器宣告可以

C#----GetSet在屬性的使用

Get和Set在屬性中的作用: 第一個作用:保證資料的安全性,對欄位進行了有效的保護。 第二個作用:起到監視作用 private int width=0; public int Width { get{return width;} set{width=va

C#GetPost請求的同步及異步方法

iter epo charset result string pty streambuf div httpget 在C#中發起Http請求一般使用HttpWebRequest這個類,下文將使用這個HttpWebRequest對象來對Get和Post的同步及異步請求進行封裝:

再談面向物件的封裝、繼承多型

封裝 封裝說的是把資料封裝起來,對外暴露一個可以訪問的介面,不能讓外界直接訪問內部的資料。 從上面的描述可以抽取出兩種型別:介面和類。 從現在比較火的微服務的觀點上來看,一個類就是一個服務,一個物件就是一個服務的例項,通過這個服務暴露的介面來訪問這個服務。從這個意義上來講,面向

面向物件的finalstatic關鍵字特點總結

1 final的特點 1.1 final修飾類不可以被繼承,但是可以繼承其他類。 class Yy {} final class Fu extends Yy{} //可以繼承Yy類 class Zi extends Fu{} /

Mysql資料庫大量刪除操作及談面向物件的封裝繼承多型原理(圖)

Mysql資料庫大量刪除操作及談面向物件中的封裝繼承和多型原理(圖) 最近進行資料庫操作,遇到一個問題,就是大量刪除一個數據表中的資料後,由於設定了id是自增的,導致再插入時,預設生成的id會很大,這個時候想要再次插入新的資料,應該怎麼辦呢? 1.明確目前最後一個id的大小 select id fr

C#GetPost請求的同步及非同步方法

在C#中發起Http請求一般使用HttpWebRequest這個類,下文將使用這個HttpWebRequest物件來對Get和Post的同步及非同步請求進行封裝: 新建HttpRequestHelper類: public static class H

關於C++vectorset使用sort方法進行排序

C++中vector和set都是非常方便的容器, sort方法是algorithm標頭檔案裡的一個標準函式,能進行高效的排序,預設是按元素從小到大排序 將sort方法用到vector和set中能實現多種符合自己需求的排序 首先sort方法可以對靜態的陣列進行排序

Python面向物件super用法與MRO機制

  1. 引言      最近在研究django rest_framework的原始碼,老是遇到super,搞得一團蒙,多番檢視各路大神部落格,總算明白了一點,今天做一點總結。      2. 為什麼要用super      1)讓程式碼維護更加簡單      Python是一門面向物件的語言,定義

C++mapset的使用與區別

set set是一種關聯式容器,其特性如下: set以RBTree作為底層容器 所得元素的只有key沒有value,value就是key 不允許出現鍵值重複 所有的元素都會被自動排序 不能通過迭代器來改變set的值,因為set的值就是鍵 針對這五點來說,

C# getset

在面向物件程式設計(OOP)中,是不允許外界直接對類的成員變數直接訪問的,既然不能訪問,那定義這些成員變數還有什麼意義呢?所以C#中就要用set和get方法來訪問私有成員變數,它們相當於外界訪問物件的一個通道,一個“介面”。先來看一段程式碼: class Employee

c#欄位,屬性getset精解

在講解get和set訪問器之前,為了更方便理解,先講解一個例子(不想看例子的可以直接跳到文章正式部分,這裡照顧下新手,是不是很暖?哈哈) 今天做專案的時候,在建立房間介面有一個底分的選項,要求底分的範圍在1-20之間。這裡我另外建立了一個練習的專案,面板如下圖: