6.封装

封装就是对外部类隐藏成员或变量。我已经说过房子的保安仅仅被限制在房子的入口处,不需要知道屋内发生了什么。房主对保安隐藏了屋内所发生的任何事,以便更安全。隐藏和限制就被称为封装。

例如我们有两个类,一个是”Houseclass”另一个是”houseSecurityClass”。

我们可以看到所有的成员都包裹在公开的类houseSecurityClass里,所以Houseclass类的对象能够访问 houseSecurityClass里的任何成员。但是Houseclass有2个成员,一个public一个private。private类不能够被外部的类所访问。

 public class houseSecurityClass
{
public int noofSecurity;
public String SecurityName = String.Empty;
} public class Houseclass
{
private int noofLockerinHosue = ;
public string OwnerName = String.Empty;
}

7.抽象化

抽象就是显示和分享一些共同的信息给用户。接着讨论屋子的例子。屋子里有仆人,能够进入任何房间,做清洁和其他的事情。房主可以给仆人所有或者部分进入卧室的权限。我们可以看出,程序中private的成员和方法都是仆人所没有的权限,而public的成员和方法都是仆人所拥有的权限。

 public class HouseServerntClass
{ private int SaftyLoackerKeyNo = ;
public String roomCleanInstructions = "Clean All rooms"; private void saftyNos()
{
Console.WriteLine("My SaftyLoackerKeyNo is" + SaftyLoackerKeyNo);
} public void roomCleanInstruction()
{
Console.WriteLine(roomCleanInstructions);
} }

8.继承

继承就是为了代码的重用。在protected internal访问修饰符章节我们已经看到继承的例子。继承就是在派生类中能够访问父类的所有公开的方法和变量等。

单层次继承--一个派生类只继承一个父类。

 public class baseClass
{
private void privateMethod()
{
Console.WriteLine("private Method");
} public void publicMethod()
{
Console.WriteLine("This Method Shared");
}
}
public class DerivedClass : baseClass
{
static void Main(string[] args)
{
DerivedClass obj = new DerivedClass();
obj.publicMethod();
//obj.privateMethod(); //This will be error as private method can not be accessed in Derived Class
} }

注意:有时候大家可能不清楚什么是基类,什么是派生类。基类就是超级类,派生类就是继承了基类。

下面就是一个继承的例子,基类GuestVist,派生类HouseOwnerClass。派生类HouseOwnerClass继承自GuestVisit类。

 HouseOwnerClass.Here HouseOwnerClass class inherits the base class of GuestVist
class GuestVist
{
public void Guestwelcomemessage()
{
Console.WriteLine("Welcome to our Home");
}
public void GuestName()
{
Console.WriteLine("Guest name is: Shanu");
} }
class HouseOwnerClass : GuestVist
{
static void Main(string[] args)
{
HouseOwnerClass obj = new HouseOwnerClass();
obj.Guestwelcomemessage();
obj.GuestName();
Console.ReadLine();
}
}

多层次继承--不止一个派生类的例子。下面的例子中我们可以看到baseclass派生了DerivedClass1,而DerivedClass1派生了DerivedClass2。因此DerivedClass2可以访问DerivedClass1和baseclass两个类的公开成员和方法。

 public class baseClass
{
private void privateMethod()
{
Console.WriteLine("private Method");
} public void publicMethod()
{
Console.WriteLine("This Method Shared");
}
}
public class DerivedClass1 : baseClass
{
public void DerivedClass1()
{
Console.WriteLine("Derived Class 1");
}
}
public class DerivedClass2 : DerivedClass1
{
static void Main(string[] args)
{
DerivedClass2 obj = new DerivedClass2();
obj.publicMethod();
obj.DerivedClass1();
//obj.privateMethod(); //This will be error as private method can not be accessed in Derived Class
} }

多重继承:

.Net支持多重继承吗?NO

一个类不能支持多重继承。

什么是多重继承?多重继承就是 一个类继承多个基类。就是一个派生类继承多于1个基类。

c#使用了多重继承会发生什么?

继续来看屋子的实例。下面的例子中我们有一个派生类ouseOwnerClass,两个基类“GuestVist” 和“FriendsandRelationsClass”.

现在家里来了两个人一个客人,一个朋友。因此我们写的3个类中派生类继承了2个类。当我用c#写一个多重继承,编译器会给出警告信息但是可以执行代码。警告信息是“Expected and interface”。

那么怎样才能支持多重继承呢?

答案是使用接口,接口支持多重继承。

~~~~今天就到这里,洗澡睡觉咯

译:C#面向对象的基本概念 (Basic C# OOP Concept) 第二部分(封装,抽象,继承)的更多相关文章

  1. 【译文】 C#面向对象的基本概念 (Basic C# OOP Concept) 第一部分(类,对象,变量,方法,访问修饰符)

    译文出处:http://www.codeproject.com/Articles/838365/Basic-Csharp-OOP-Concept 相关文档:http://files.cnblogs.c ...

  2. 译:C#面向对象的基本概念 (Basic C# OOP Concept) 第三部分(多态,抽象类,虚方法,密封类,静态类,接口)

    9.多态 Ploy的意思就是多于一种形式.在文章开始,方法那一章节就已经接触到了多态.多个方法名称相同,而参数不同,这就是多态的一种. 方法重载和方法覆盖就是用在了多态.多态有2中类型,一种是编译时多 ...

  3. 【转】Basic C# OOP Concept

    This Article will explain a very simple way to understand the basic C# OOP Concept Download ShanuBas ...

  4. C#面向对象(OOP)入门—第二天—多态和继承(继承)

    介绍: 第一天的内容主要是不同情形下的方法重载.这一部分则主要讲面向对象中继承的概念.首先用一个要点图形来定义继承. 继承 一个简单的例子: ClassA: class ClassA:ClassB { ...

  5. 面向对象。OOP三大特征:封装,继承,多态。 这个讲的是【封存】

    class Ren { private $name; private $sex; private $age; //年龄必须在18-50之间 function __constuct($v) { $thi ...

  6. C#面向对象(二):封装和继承

    前文链接:C#面向对象(一):明确几个简单的概念作为开胃菜 面向对象开发有三大特性(特点 / 特征) : 封装, 继承, 多态.我们今天主要讨论封装和继承,多态会在下篇中讨论. 一.封装: 所谓封装, ...

  7. [python 译] 基于面向对象的分析和设计

    [python 译] 基于面向对象的分析和设计 // */ // ]]>   [python 译] 基于面向对象的分析和设计 Table of Contents 1 原文地址 2 引言 2.1 ...

  8. python基础(八)面向对象的基本概念

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 谢谢逆水寒龙,topmad和Liqing纠错 Python使用类(class)和对 ...

  9. PHP从零开始-笔记-面向对象编程的概念

    面向对象变成的概念 需要一一种不同的方式来考虑如何构造应用程序.通过对象可以在对应用程序所处理的显示任务.过程和思想进行编码是,实施更贴切的建模.OOP方法并不是将应用程序考虑成一个将大量数据从一个函 ...

随机推荐

  1. Lingo 做线性规划 - Asset allocation and Portfolio models

    Reference: <An Introduction to Management Science Quantitative Approaches to Decision Making, Rev ...

  2. H5图片裁剪升级版(手机版)

    前段时间做了个跟裁剪相关的活动<用H5中的Canvas等技术制作海报>,这次公司要做个与奥运相关的活动,扫车牌赢奖. 于是我就在上一个活动的基础上,将代码重新封装一下,并且将计算方式写的更 ...

  3. 菜鸟学习WCF笔记-Address

    终结点是WCF最为核心的对象,因为它承载了所有通信功能.服务通过相应的终结点发布出来,客户端通过与之匹配的终结点对服务进行调用.终结点有地址.绑定和契约ABC三要素构成. Address  作为终结点 ...

  4. Leetcode 235 Lowest Common Ancestor of a Binary Search Tree 二叉树

    给定一个二叉搜索树的两个节点,找出他们的最近公共祖先,如, _______6______ / \ ___2__ ___8__ / \ / \ 0 4 7 9 / \ 3 5 2和8的最近公共祖先是6, ...

  5. Java 命名空间的由来和引入

    名字可视性(Name visibility) 名字管理对任何程序设计语言来说,都是一个重要问题.如果你在程序的某个模块里使用了 一个名字,而其他人在这个程序的另一个模块里也使用了相同的名字,那么怎样才 ...

  6. TCP_NODELAY 和 TCP_CORK主要区别

    一句话总结: tcp_nodelay:禁止nagle算法,有需要发送的就立即发送,比较常见 tcp_cork:它是一种加强的nagle算法,过程和nagle算法类似,都是累计数据然后发送.但它没有 n ...

  7. 直接使用提交过来的类来更新字段EntityState.Modified并过滤null值的方法

    public T Update<T>(T entity) where T : ModelBase { var set = this.Set<T>(); set.Attach(e ...

  8. 【LeetCode】258. Add Digits (2 solutions)

    Add Digits Given a non-negative integer num, repeatedly add all its digits until the result has only ...

  9. Javascript中使用WScript.Shell对象执行.bat文件和cmd命令

    WScript.Shell(Windows Script Host Runtime Library)是一个对象,对应的文件是C:/WINDOWS/system32/wshom.ocx,Wscript. ...

  10. MSSql使用SQL语句快速查看表对的就说明,及表字段描述及字段类型

    --表描述 SELECT tbs.name 表名,ds.value 描述 FROM sys.extended_properties ds LEFT JOIN sysobjects tbs ON ds. ...