由于ASP.NET技术是全面向对象的,因此,要掌握这一技术,必须具备有扎实的面向对象理论基础

使用C#编程,所有的程序代码几乎都放在类中,不存在独立于类中之外的函数,因此,类是面向对象编程的基本单元

在绝大多数面向对象语言中,一个类都可以包含两种成员:字段和方法。字段与方法这两个概念是面向对象理论的术语,是通用与各种面向对象语言的。而在各种的具体面向对象语言(比如C#)中,可以简单地理解:

字段及变量,方法及函数。

字段:代表了类中的数据,在类的所有方法之外定义一个变量即定义了一个字段。在字段前加public,private和protected表示字段的访问权限。

方法:为了解决代码重复的问题,绝大多数程序设计语言都将完成某一公用功能的多个语句组合在一起,起一个名字用于代表这些语句的全体,这样的代码块被称为“函数”。

C#函数语法格式

返回值类型 方法名(参数列表)
{
语句1;
语句2;
return 表达式;
}

方法需要向外界返回一个值,由return语句实现

如果一个方法没有返回至或者不关心返回值,则将其返回值定义为void。

void 方法名(参数列表)
{
语句1;
语句2;
return ; //在return后写一个空语句
}

方法重载

class MathOpt
{
//整数相加
public int Add(int x,int y)
{
return x+y;
}
//浮点数相加
pubilc double Add(double x, double y)
{
return x+y;
}
}

上述方法名相同,参数类型不同,这两个同名的函数彼此构成了"重载(Overload)"关系。

重载方法调用:

MathOpt mathOpt=null;
mathOpt=new MathOpt;
int IResutl=mathOpt.Add(,); //调用类的整数相加方法
double DResult=mathOpt.Add(5.5,6.6); //调用类的浮点数相加方法
Console.WriteLine("整数结果:"+IResult.ToString());
Console.WriteLine("浮点数结果:"+DResult.ToString());

两个构成重载关系的方法必须满足:

(1):方法名相同。

(2):参数类型不同,或参数个数不同。

public long Add(int x,int y){...}
public int Add(int x,int y){...}
//这两个方法就不具备构成重载关系,因为这两个函数的实参类型和数目都相
//同,仅返回值类型不同。另外注意C#是区分大小写的语言,因此如果一个类//中有以下两个方法:
public long add(int x,int y){...}
public long Add(int x,int y){...}
//则可以通过编译并且运行,但这并不是说这两个方法构成重载关系。

类的静态成员

类中的方法,如果在声明是没有加“static”关键字,则称之为类的“实例方法(instance method)”。加上static关键字的方法成为“静态方法(static method)”,类似地,加了static关键字的字段成为“静态字段(static field)”。

静态成员在使用的时候不需要创建对象就能使用。

静态成员是供类的所有对象所共享的。

举例

class StaticMembers
{
public static int staticVar = ;
public int dynamicVar = ;
public void increaseValue()
{
staticVar++;
dynamicVar++;
}
}
       static void Main(string[] args)
{
StaticMembers obj = null;
//创建100个对象
for (int i = ; i < ; i++)
{
obj = new StaticMembers();
obj.increaseValue();
} //查看静态字段与普通字段的值
Console.WriteLine("dynamicVar:" + obj.dynamicVar);
Console.WriteLine("staticVar:" + StaticMembers.staticVar);
Console.ReadKey();
}

结果为:

dynamicVar:
staticVar:
在本节示例中创建了 100 个对象,每个对象拥有 1 个 dyanmicVar 字段,一共有 100 个dyanmicVar 字段,这些字段是独立的, “互不干涉内政” 。而 staticVar 字段仅有一个,为所有对象所共享。
实例成员和静态成员访问规则
  同一个类中的实例成员可直接相互调用。
  类的字段可以被同一类中的所有实例方法直接访问。
  类中的静态方法只能直接访问静态字段。 类的属性
再设计类使用属性(Property)可以保证只有合法的数据可以传给对象
以Name为例,要求不能为空。
//定义私有字段
private String _Name="姓名默认值";
//定义Name属性
public String Name
{
get
{
return _Name;
}
set
{
if(value.Lengh==)
throw new Exception("姓名不能为空");
_Name=value;
}
}

属性由两个特殊的读访问器(get)和写访问器(set)组成。

当读取Name属性时,读访问器被调用,仅返回私有字段_Name;

当设置Name属性时,写访问器被调用,先检查是否符合条件,再将传入的值保存在私有字段中。

编写属性方法:

1).设计一个私有的字段用于保存属性的数据;

2).设计get、set访问器存取私有字段数据。

深入理解类与对象

  类和对象的区别

    对象是以类为模版创建出来的。类与对象之间是一对多的关系。

      在C#中,使用new 关键字创建对象。

    在程序中“活跃”的是对象而不是类。

“对象”与“类的实例”这两个概念是同等的。

  类的构造函数

    当使用new关键字创建一个对象时,一个特殊的函数被自动调用,这就是类的构造函数(constructor)。

    构造函数与类的名字相同,没有返回值

class A
{
//类A的构造函数
public A()
{
}
}

    构造函数在以类为模版创建对象是被自动调用,一般用于初始化类的私有数据字段。

  引用类型与值类型

    .net将变量类型分为“值类型”与“引用类型”,如int和float之类的变量属于值类型,而“类”类型的变量则属于“引用类型”。

    两者区别

    值类型的变量一定义之后就马上可用。

    引用类型的变量定以后,还必须用new关键字创建对象才可以使用。

值类型与引用类型内存分配:

内存区域主要分为线程堆栈(Thread Stack)托管堆(Managed Heap)

值类型都是在线程堆栈中分配而引用类型是在托管堆中分配

理解值类型和引用类型在面向对象编程中非常关键

C#编程语言与面向对象——类与对象的更多相关文章

  1. Java面向对象-类与对象

    Java面向对象-类与对象 类与对象的关系 我们通俗的举个例子,比如人类是一种类,张三这个人就是人类的具体的一个个体,也就是java中的对象:这就是一个类与对象的关系: 类的定义 下面看实例 类的创建 ...

  2. Python之面向对象类和对象

    Python之面向对象类和对象 定义一个类:class 定义类的语法: class Test(object): """ 类里定义一类事物共同的技能. 可以是变量,也可是函 ...

  3. python面向对象——类和对象

    一.三大编程范式 编程范式即编程的方法论,标识一种编程风格 三大编程范式: 1.面向过程编程(流水线式) 优点:极大的降低了程序的复杂度 缺点:应用场景固定住了,可扩展性差 2.函数式编程 特点: a ...

  4. OC语言的面向对象—类和对象、方法

    1. 面向对象和面向过程思想 OC是面向对象的,C是面向过程的.面向对象和面向过程只是解决问题的两种不同思想 1. 面向对象和面向过程的区别 1) 以用电脑听歌为例子 a) 面向过程 ➢ 打开电脑 ➢ ...

  5. linkin大话面向对象--类和对象

    我们每天在撸码,那么我们在敲什么东西呢?明显的我们在写类,写一个类,写一个接口,写某个接口里面写一些属性,在某个类里面写一个方法,然后以一个对象调用方法,对于j2ee来讲的话,可能还会写一些jsp,静 ...

  6. Java面向对象——类,对象和方法

    1.类的概念 在生活中,说到类,可以联想到类别,同类,会想到一类人,一类事物等等.而这一类人或事物都是具有相同特征或特点和行为的,我们根据不同的特征或特点和行为将他们归类或分类.同时,当我们认识一个新 ...

  7. day 22 面向对象 类与对象 名称空间操作

    一.面向对象 1.面向过程编程 核心是"过程"二字,过程指的是解决问题的步骤,即先干什么再干什么 基于该思想编写程序就好比在编写一条流水线,是一种机械式的思维方式. 优点:复杂的问 ...

  8. Java面向对象类与对象整理

    第一章           面向对象: 1.1         什么是面向过程: 遇到某件事的时候,思考 “我该怎么做”然后一步一步实现的过程 1.2         什么是面向对象: 遇到某件事的时 ...

  9. python面向对象(类和对象及三大特性)

    类和对象是什么 创建类 新式类 和 经典类 面向对象三大特性 继承 封装 多态   面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使 ...

随机推荐

  1. 关于ssh上传文件

    今天用ssh传项目到公司总部的服务器上,报了错误: encountered 1 errors during the transfer 重启ssh再次上传还是一样的错误,然后我让公司那里重启一下服务器, ...

  2. JavaScript拼图游戏

    今天是2016年最后一天上班了.最近几天都比较休闲,有时间空闲下来写写文档之类的. 2016过得真是快.感觉没做什么就过去了.想到之前想坚持每个月写一写博客都没坚持到.希望2017年可以吧. 无聊之余 ...

  3. 模具厂MES项目介绍

    开发工具:Microsoft Visual Studio 2012 数据库:     Oracle 开发语言:C#(4.0) 版本控制工具:TortoiseSVN 底层ORM框架:IBatisNet ...

  4. spring定时器

    本人小菜鸟一枚,今天在公司看到一段spring定时器配置,自己总结一下! <!-- 定义调用对象和调用对象的方法 --><bean id="jobtask9" c ...

  5. Primitive JS completion of AJAX

    Firstly , let us explain XMLHttpRequest open(), send(), readyState 1. open(method, url, async, user, ...

  6. C++小项目:directx11图形程序(五):shadersclass

    这个类是用来创建着色器并设置输入布局的. 这个类比较特殊,它创建的着色器与Effect文件有关,effect文件是用高级着色语言(hlsl)编写的. shadersclass.h #pragma on ...

  7. Uart、SPI和I2C的区别

    串口通信:UART.SPI.I2C区别[引用]   1.UART就是两线,一根发送一根接收,可以全双工通信,线数也比较少.数据是异步传输的,对双方的时序要求比较严格,通信速度也不是很快.在多机通信上面 ...

  8. js动画之缓冲运动

    缓冲运动就是运动的速度与时间或者距离有关联,不是一般的匀速运动 <!DOCTYPE html> <html lang="en"> <head> ...

  9. Linux学习 : 自己写bootloader

    一.bootloader 目标:启动内核 基本功能: ①初始化硬件:关看门狗.设置时钟.设置SDRAM.初始化NAND FLASH ②image比较大需要重定位到SDRAM ②将内核从NAND FLA ...

  10. [javascript|基本概念|Number

    Number类型的值:整数/浮点数值 整数 十进制  e.g.: var intNum = 50; 八进制  (严格模式下无效,解析错误)字面值首位必须是0,之后的数字序列为0-7  e.g.: va ...