譯文出處:http://www.codeproject.com/Articles/838365/Basic-Csharp-OOP-Conceptjava
相關文檔:http://files.cnblogs.com/yplong/ShanuBasicCSharpOOPConceptV1.4.zip編程
列表:c#
簡介:安全
關於C#面向對象咱們能在網上找到不少解釋,但在個人文章中我會用一個很是簡單的例子來解釋。該文章我會用一個House(房子)就像咱們居住的房子做爲實際的例子來讓你們更容易的理解c#面向對象概念。ide
1.類(Class)函數
類就像一個設計圖(BluePrint).spa
什麼是設計圖?翻譯
設計圖就是把咱們的真實想法用線條勾勒出來。好比咱們想建造一個新的房子,設計師就會把咱們的想法用設計圖的方式畫出來,就像下面的圖片。設計
一旦咱們最後贊成了設計,設計師就會開始建造一個與設計圖同樣的房子。3d
類和設計圖很是類似,只不過是用編程來畫出類的設計圖。經過類,咱們就能夠寫本身的方法,定義本身的變量。經過使用對象,就能夠讀取咱們類裏面的 方法和變量。方法,變量和對象組成了一個類。
經過真實世界存在的物體-房子咱們可以更容易的理解面向對象。咱們能夠把房子想象成一個類。在房子裏咱們有不少的房間,好比客廳、臥室、廚房,還有其餘的好比電視,冰箱等。房子的主人可以獲取和使用房子裏的房間和其餘的任何房間裏的東西。就像類裏面的一組方法和變量,房子裏的全部屋子和房子裏的全部東西 就像類裏面的方法和變量。
有了房間和房間裏的必需品,全部咱們就有了一個完整的房子。使用一個類,存取和使用類裏的方法和變量,這裏咱們就用到了對象。對象是類的一個實例。下一章節咱們會詳細的討論對象。
若是在一個房子裏面 沒有房間和物品,會怎樣?可想而知,在沒有房間和物品以前,房子就是空的不能使用的。以下圖就是一座空房子:
如今空房子就是一個類,沒有方法和變量,咱們如何使用這個類。
下面咱們就看看一個包含方法和變量的完整的類。
這裏咱們就有了一個完整的房子,類似的類就有了方法,變量和對象。後面章節咱們再詳細說明。
類和對象就是面向對象的基本概念(Class and objects are the base concept of OOP – Object Oriented Programming.)
下面是一個類的例子-->類 必須以Class關鍵字開始,後面跟着類名(能夠是任何意義的名稱由你本身定義),緊接着是開始和關閉括弧。({})。
1 class ShanuHouseClass1 2 { 3 }
2.對象(Object)
前面咱們已經看到了對象。房子的主人可以使用房子裏的任何房間和任何物品。類似的,咱們可使用對象來存取和使用類裏面的方法和變量。同一個類,咱們能夠建立一個或多個對象。
好比一個房子能夠有多個主人。(爸爸,媽媽,孩子)等。
下面是一個對象-->"objHouseOwner"就是一個對象,咱們能夠來存取和使用類裏面的方法和變量。
ShanuHouseClass1 objHouseOwner = new ShanuHouseClass1();
3.變量(Variable)
變量是用來存儲咱們的值。咱們的值能夠是數字類型(numeric)或者字符類型( characters)等,好比要存儲一個手機號碼,咱們能夠用一個整型變量(int),存在咱們的姓名可使用一個字符串類型的變量(String).
變量能夠是局部的也能夠是全局的。好比咱們買了一個新的電視,電視服務商就會過來把電視安裝到咱們的家裏。他會留下聯繫方式以便未來可以聯繫。通常咱們會把他的聯繫方式寫在便籤紙上,放到經常使用的地方或者咱們的錢包裏。若是咱們把便籤放到一個公共的區域,任何一個進來的人都可以看到這個電話號碼,全局或者公共(Public)變量就是這樣。
若是咱們申明一個全局變量,那麼在類裏面的全部方法都可以存取這個變量。若是咱們把便籤放到錢夾裏,就只有咱們本身可以看到該號碼。局部或者私有變量(Private)就是這樣。
變量的語法:
Access-Modifiers Data-Type Variable-Name
訪問修飾符-變量類型-名稱
變量的默認修飾符 是Private 私有變量。咱們能夠本身定義爲public。
變量的例子:
1 int noOfTV = 0; 2 public String yourTVName; 3 private Boolean doYouHaveTV = true; 4 5 // Example Program 6 7 class ShanuHouseClass 8 { 9 int noOfTV = 2; 10 public String yourTVName = "SAMSUNG"; 11 12 static void Main(string[] args) 13 { 14 ShanuHouseClass objHouseOwner = new ShanuHouseClass(); 15 16 17 Console.WriteLine("You Have total " + objHouseOwner.noOfTV + " no of TV :"); 18 Console.WriteLine("Your TV Name is :" + objHouseOwner.yourTVName); 19 20 } 21 }
上面的代碼中,我在類裏面申明瞭2個變量,在主方法(Main)中我建立了一個類的對象(實例,對象是累的實例)。這裏咱們就能夠經過對象來訪問類裏面的變量來顯示出來。
Main方法是c#裏面的一個默認方法,全部應用程序的主入口方法。在主方法中咱們申明一個類的對象並使用它。經過對象咱們可以訪問類中的可訪問的方法和變量。能夠說是進入每一個房子的大門。經過大門咱們就可以進入咱們本身的房子裏面。類似的,運行程序,就會有一個默認的入口函數。入口函數就是啓動程序執行的關鍵點。不論咱們執行的是控制檯程序仍是Windows應用程序,入口函數是最早執行的。從入口函數,咱們能夠建立一個類的對象來調用類裏面的方法。
4. 方法或函數(Method or Functions)
方法是一組代碼語句。咱們看看上面例子中的方法代碼:
class ShanuHouseClass { int noOfTV = 2; public String yourTVName = "SAMSUNG"; public void myFirstMethod() { Console.WriteLine("You Have total " + noOfTV + "no of TV :"); Console.WriteLine("Your TV Name is :" + yourTVName); Console.ReadLine(); } static void Main(string[] args) { ShanuHouseClass objHouseOwner = new ShanuHouseClass(); objHouseOwner.myFirstMethod(); }
注意:不少開發人員都很疑惑 方法和函數有什麼不一樣。兩個都是同樣的。在這篇文章中我用方法代替函數。然而函數和方法有一點不一樣。在面嚮對象語言好比「c#,java」等,咱們用的叫作方法。在非面嚮對象語言好比「C」,咱們成函數。
方法有什麼用途?
另外一個實時例子咱們用咱們的手機號碼來解釋。好比咱們有一部手機,咱們裏面存了好多歌曲。然而咱們常常聽的確實一下選中的歌曲。每次都很難選中咱們本身最喜歡的歌曲。選中困難症哈哈~~
替代選擇的就是 重複的聽列表裏的歌曲。列表裏咱們能夠添加咱們所喜好的歌曲,只須要輕輕的點擊列表,就能夠聆聽美妙的音樂。這讓咱們作起來簡單,不須要每次重複的去搜索喜好的歌曲。方法就像歌曲列表同樣,咱們能夠在方法裏面寫一些常常要用的,要重複使用的代碼,每次須要的時候,只須要調用便可,不須要重複的寫代碼。
下面咱們來說解一些方法的細節:
假如在一個大房子裏,咱們有一個大房間,和幾個小房間。每一個房間有不一樣的佈置(東西,裝飾)。類似的,在一個類裏咱們能夠寫一個或多個方法。
在一個房子裏能夠有幾間臥室,他們的名字都叫臥室,可是每一個臥室有不一樣的尺寸,顏色等。就是說,相同的臥室有不一樣的類型。類似的,在類中咱們能夠定義幾個方法名相同,可是參數不一樣的方法。這在面向對象編程中就叫作「多態」。文章後面會詳細介紹多態。
方法的語法:
Access-Modifiers Return-Type Method-Name (Parameter-List)
訪問修飾符-返回類型-方法名(參數列表)
Access-Modifiers:後面會有詳細的講解
Return-Type:若是咱們的方法有返回值,那麼咱們就要定義返回值的類型,好比string,int 等,若是不須要返回值,那麼咱們就使用「Void」類型。
Method-Name:咱們要給咱們建立的每個方法 都要有名稱。
Parameter-List:參數列表或參數,咱們用來傳遞給函數。
接下來是一個方法的例子-->
Void類型的方法:void是一個關鍵字,用來表示不須要返回數據的方法。看下面的方法,在這個方法中咱們顯示咱們全部的輸出用"Console.WriteLine",使用"ReadLine()"來等待輸入。這個方法包含了輸出和輸入,可是沒有返回任何值。
1 // Function with void and no parameter -- here void means no return type 2 public void veranda() 3 { 4 Console.WriteLine("Welcome to Veranda"); 5 Console.WriteLine("How Many Chairs Do you have in your Veranda"); 6 NoofChair = Convert.ToInt32(Console.ReadLine()); 7 Console.WriteLine("I have total " + NoofChair + " Chairs in my Veranda"); 8 }
有返回值類型的方法:
有返回值類型的方法,會返回一個結果供程序中使用。好比,下面有一個返回字符串(string)類型的方法TVNAME。咱們能夠假設在咱們家裏,客廳裏有一臺電視,在父母臥室有一臺電視,在孩子房間也有一臺電視,每一個房間的電視品牌都不同。假設咱們想知道每一個房間裏面的電視品牌名稱,咱們須要寫三次代碼來得到。爲了減小重複代碼,咱們能夠給方法一個返回值。
1 // Function with Return type as String 2 public string TVNAME() 3 { 4 Console.WriteLine("Enter Your TV Brand NAME"); 5 YOURTVName = Console.ReadLine(); 6 return YOURTVName; 7 }
帶參數的方法:
到這以前,咱們寫的方法都是沒有參數的。參數被用來傳遞數據到方法中,以便更好地執行方法。
好比咱們家裏要刷牆壁,每一個人對本身的臥室牆壁顏色有不一樣的選擇。咱們就能夠把每一個人的名字,和選擇的顏色以參數的方式傳遞到方法中。
1 //Function with parameter 2 public void BedRoom(String nameandColor) 3 { 4 Console.WriteLine(nameandColor); 5 }
1 // Same Function Name with Different Paramenter 2 public void BedRoom(String MemberName,String Color) 3 { 4 Console.WriteLine(MemberName + " Like " + Color + "Color"); 5 }
相同的方法名稱,不一樣的參數咱們稱爲重載(OverLoad)。
上面的2個方法就是重載,有相同的方法名,不一樣的參數。
下面是完整的代碼:
1 class ShanuHouseClass1 2 { 3 int NoofChair = 0; 4 public String YOURTVName; 5 private Boolean DoyouHaveTV = true; 6 7 8 9 // Function with void and no parameter -- here void means no return type 10 public void veranda() 11 { 12 Console.WriteLine("Welcome to Veranda"); 13 Console.WriteLine("How Many Chairs Do you have in your Veranda"); 14 NoofChair = Convert.ToInt32(Console.ReadLine()); 15 Console.WriteLine("I have total " + NoofChair + " Chairs in my Veranda"); 16 } 17 18 19 // Function with Return type as String 20 public string TVNAME() 21 { 22 Console.WriteLine("Enter Your TV Brand NAME"); 23 YOURTVName = Console.ReadLine(); 24 return YOURTVName; 25 } 26 27 //Function with parameter 28 public void BedRoom(String nameandColor) 29 { 30 Console.WriteLine(nameandColor); 31 } 32 33 // Same Function Name with Different Paramenter 34 public void BedRoom(String MemberName,String Color) 35 { 36 Console.WriteLine(MemberName + " Like " + Color + "Color"); 37 } 38 39 40 static void Main(string[] args) 41 { 42 ShanuHouseClass1 objHouseOwner = new ShanuHouseClass1(); 43 44 45 objHouseOwner.veranda(); 46 String returnvalue = objHouseOwner.TVNAME(); 47 Console.WriteLine("Your TV BRAND NAME IS: "+returnvalue); 48 objHouseOwner.BedRoom("My Name is Shanu I like Lavender color"); 49 objHouseOwner.BedRoom("My Name is Afraz I like Light Blue color"); 50 objHouseOwner.BedRoom("SHANU", "Lavender"); 51 Console.ReadLine(); 52 53 54 } 55 }
下面是輸出的結果集:
5.訪問修飾符
訪問修飾符就是對方法,類,屬性,變量等訪問的安全限制。
private
public
internal
protected
protected internal
這6個訪問修飾符是c#中方法,類,變量經常使用的訪問修飾符。
Private:
繼續咱們的房間例子。家裏有一個保安,他的職責就是守在房子的入口,他不能進入房子作任何事。此時咱們能夠建立一個SecurityGuardClass申明一個變量和一個私有方法。
Public:
房子的主人對class來講是public 的,可以訪問全部與該類相關的任何東西。他們對房子裏的東西沒有任何限制。
Protected:
只有main類和派生類可以訪問 protected 類型的方法和變量。好比僕人和客人是Protected.僕人可以到全部房間打掃等作其餘的事情。然而他們受到某些限制的好比不能再主人的牀上睡覺。
Internal:
變量或方法被限制在一個項目中。好比咱們的項目不止一個類,在某個類中申明一個internal 變量,讓咱們看下面的例子。
1 public class sampleInternalClass 2 { 3 internal String myInternal = "Iam Internal Variable"; 4 } 5 class ShanuHouseClass 6 { 7 int noOfTV = 2; 8 public String yourTVName = "SAMSUNG"; 9 10 public void myFirstMethod() 11 { 12 Console.WriteLine("You Have total " + noOfTV + "no of TV :"); 13 Console.WriteLine("Your TV Name is :" + yourTVName); 14 15 } 16 17 static void Main(string[] args) 18 { 19 ShanuHouseClass objHouseOwner = new ShanuHouseClass(); 20 objHouseOwner.myFirstMethod(); 21 sampleInternalClass intObj = new sampleInternalClass(); 22 23 Console.WriteLine("Internal Variable Example :" + intObj.myInternal); 24 Console.ReadLine(); 25 26 } 27 }
Protected Internal:
Protected Internal 類型的變量或方法被限制在一個工程中的類或繼承類。接下來是一個Internal變量的工程的例子,在這個例子中咱們用到了繼承。後面章節會詳細解說繼承。
1 public class sampleProtectedInternalClass 2 { 3 protected internal String myprotectedInternal = "Iam Protected Internal Variable"; 4 5 public void protectedInternalMethod() 6 { 7 Console.WriteLine("Protected Internal Variable Example :" + myprotectedInternal); 8 } 9 } 10 public class derivedClass : sampleProtectedInternalClass 11 { 12 public void derivedprotectedInternal() 13 { 14 Console.WriteLine("Derived Protected Internal Variable Example :" + myprotectedInternal); 15 } 16 } 17 class ShanuHouseClass 18 { 19 int noOfTV = 2; 20 public String yourTVName = "SAMSUNG"; 21 22 public void myFirstMethod() 23 { 24 Console.WriteLine("You Have total " + noOfTV + "no of TV :"); 25 Console.WriteLine("Your TV Name is :" + yourTVName); 26 27 } 28 29 static void Main(string[] args) 30 { 31 ShanuHouseClass objHouseOwner = new ShanuHouseClass(); 32 objHouseOwner.myFirstMethod(); 33 sampleProtectedInternalClass intObj = new sampleProtectedInternalClass(); 34 35 intObj.protectedInternalMethod(); 36 37 derivedClass proIntObj = new derivedClass(); 38 proIntObj.derivedprotectedInternal(); 39 Console.ReadLine(); 40 41 } 42 }
注意:主函數main和主要作的事情咱們須要先了解封裝,抽象,多態和繼承。後面章節詳細解說。
~~初次翻譯,語言組織能力差,本身都以爲尷尬,繼續努力,一步步提升 。今天有點事兒,先翻譯前面這些。重頭戲還在後頭,預知後事如何,且聽下回分解。