译文出处: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和主要作的事情咱们须要先了解封装,抽象,多态和继承。后面章节详细解说。
~~初次翻译,语言组织能力差,本身都以为尴尬,继续努力,一步步提升 。今天有点事儿,先翻译前面这些。重头戏还在后头,预知后事如何,且听下回分解。