C#是纯粹的面向对象编程语言,它真正体现了“一切皆为对象”的精神。在C#中,即使是最基本的数据类型,如int,double,bool类型,都属于System.Object(Object为所有类型的基类)类型。此外,使用C#编程,不会存在与游离于对象之外的属于过程的东西。因此,学习C#,就必须具有面向对象思想。

什么是类?

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

  在绝大多数面向对象语言中,一个类都可以包含两种成员:字段与方法。字段与方法这两个概念是面向对象理论的术语,是通用于各种面向对象语言的。而在各种的具体面向对象语言中,可以简单的这样理解:字段即变量,方法即函数

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

例:

class ren

{

public decimal tizhong; //体重decimal类型

private static decimal nianling;//年龄decima类型,静态的

public int shengao=175;//身高int类型,身高赋值175cm;

}

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

例如:

[public | private] class 类名  //类名前的修饰符默认是public

{

[public | private]  数据类型  变量名;//定义变量

[public | private] 数据类型 函数名(参数列表)//定义函数

{

函数体;

}

}

  

  在一个program.cs文件中添加一个类,而这个class类就是专门存放程序需要的函数方法的库(平时的积累),每一个 方法函数都由多个变量、语句等组成的一个代码块,而这个代码块有一个方法名,(在方法名前加修饰符public,private,protected等表 示这个函数的访问权限)需要时直接在主函数的文件中调用这个方法名即可。

  函数也分为有返回值和无返回值两种情况。

<1>有返回值的情况(多种数据类型,如int,string,double等):

class  类名{

public int  函数名(int x,int y)

{

int z=x+y;

return z;//上面函数的数据类型就是return要返回的数据类型,一定要对应一致,才能在主函数中调用并输出返回值;

}

}

<2>无返回值的情况(void)

class  类名{

public void  函数名(int x,int y)//如果没有返回值,即在定义函数名前加void;

{

int z=x+y;

Console.Write("z的值为:"+z);直接在函数中输出

return;//或者直接return+分号;即没有返回值,不用在主函数中调用输出

}

}

方法的定义与使用

定义:放在一个类的函数(通常加一个存取权限修饰符)称为“方法”;

  调用一个方法最基本的方式是通过类创建的对象。new初始化对象的过程是创建一个新对象的过程,利用原有的模板创建一个新的对象,开辟一个新的空间。

例如:ren r=new ren();

  在ren类中定义一个Add()方法:

public class ren()

{

public int Add(int x,int y)

{

return x+y;

}

}

主函数调用ren()这个方法:

static void Main(string[] args)

{

ren r=new ren();//创建ren类的对象,命名r

int result=r.Add(100,200);//通过对象调用类的方法,结果保存在局部变量中

}

方法重载 

  方法重载是实现多态的另一个方法。通过方法重载,一个类中可以有多个具有相同名字的方法,由传递给它们的不同个数的参数来决定使用哪种方法。例 如,对于一个作图的类,它有一个draw()方法用来画图或输出文字,我们可以传递给它一个字符串、一个矩形、一个圆形,甚至还可以再制定作图的初始位 置、图形的颜色等。对于每一种实现,只需实现一个新的draw()方法即可,而不需要新起一个名字,这样大大简化了方法的实现和调用,程序员和用户不需要 记住很多的方法名,只需要传入相应的参数即可。

  因为类可以包含运算符如何运算的指令,所以可以把运算符用于从类实例化而来的对象。

  我们为重载运算符编写代码,把它们用作类定义的一部分,而该运算符作用于这个类。也可以重载运算符,以相同的方式处理不同的类,其中一个(或两个)类定义包含达到这一目的的代码。

注意:只能用这种方式重载现有的C#运算符,不能创建新的运算符。

练习:

用结构体做排序问题,输入学生的学号,姓名,成绩,按成绩由大到小排序。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections;
namespace jiegoutipaixu
{
class Program
{
public struct student //定义结构体数据类型
{
public int code;
public string name;
public double degree;
}
public ArrayList paixu(ArrayList shuzu)
{
for (int i = 0; i < shuzu.Count - 1; i++)
{
for (int j = i + 1; j < shuzu.Count; j++)
{
if (((student)shuzu[i]).degree < ((student)shuzu[j]).degree)
{ //等量代换
student zhong = new student();
zhong = (student)shuzu[i];
shuzu[i] = shuzu[j];
shuzu[j] = zhong;
}
}
}
return shuzu;
}
static void Main(string[] args)
{
Console.Write("请输入学生人数:");
int renshu = int.Parse(Console.ReadLine());
ArrayList shuzu = new ArrayList();//根据人数定义数组容器 for (int i = 0; i < renshu; i++) //根据人数去循环输入学生信息
{
student s = new student();
Console.Write("请输入第{0}个学生的学号:", i + 1);
s.code = int.Parse(Console.ReadLine());
Console.Write("请输入第{0}个学生的姓名:", i + 1);
s.name = Console.ReadLine();
Console.Write("请输入第{0}个学生的成绩:", i + 1);
s.degree = int.Parse(Console.ReadLine());
shuzu.Add(s);
}
shuzu = new Program().paixu(shuzu);
//3.输出
Console.WriteLine("*********成绩如下*********");
Console.WriteLine(" 学号 姓名 分数");
foreach (student a in shuzu)
{
Console.Write(" ");
Console.Write(a.code);
Console.Write(" ");
Console.Write(a.name);
Console.Write(" ");
Console.Write(a.degree);
Console.WriteLine();
}
Console.ReadLine();
}
}
}

c#面向对象基础 类、方法、方法重载的更多相关文章

  1. Java基础语法04面向对象上-类-属性-方法-可变参数-重载-递归-对象数组

    类 面向对象是一种思想,一般指将事务的属性与方法抽出总结为模板(类/class),处理事务时通过类创建/new出对象由对象的功能/方法去完成所要计算处理的事情. 面向过程:POP:以过程,步骤为主,考 ...

  2. 02java基础——类和方法

    1.类的定义 /* 定义类: 使用类的形式,对现实中的事物进行描述 事物: 属性,方法 属性: 变量 方法: 这个事物具备的功能 格式: public class 类名{ 属性定义 修饰符 数据类型 ...

  3. C#面向对象基础:virtual方法,abstract方法,区别

    virtual 关键字用于修饰方法.属性.索引器或事件声明,并使它们可以在派生类中被重写.默认情况下,类中的方法是非虚的,非虚的方法不能在子类中被覆盖(override),但是可以隐藏(new),但这 ...

  4. python基础--类的方法

    一:类的方法说明 类的方法分为实例方法,析构方法,构造方法,类方法,静态方法,属性方法,等等 类方法和静态方法都可以被类和类实例调用,类实例方法仅可以被类实例调用 类方法的隐含调用参数是类,而类实例方 ...

  5. C#面向对象基础 —— 类与对象

    文章来源: https://www.cnblogs.com/huluobozu/p/5070500.html 一.类与对象 类是面向对象编程的基本单元:类造出来的变量叫对象. 一个类包含俩种成员:字段 ...

  6. C#面向对象基础--类与对象

    1.类与对象 类是面向对象编程的基本单元:类造出来的变量叫对象. 一个类包含俩种成员:字段与方法. 字段即变量,方法即函数. 面向对象思想:教给我们如何合理的运用类的规则去编写代码. 2.类的字段 字 ...

  7. python基础--面向对象基础(类与对象、对象之间的交互和组合、面向对象的命名空间、面向对象的三大特性等)

    python基础--面向对象 (1)面向过程VS面向对象 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. ...

  8. Python 面向对象基础(类、实例、方法、属性封装)

    python是面向对象语言,一切皆对象. 面向过程: 变量和函数. “散落” 在文件的各个位置,甚至是不同文件中.看不出变量与函数的相关性,非常不利于维护,设计模式不清晰. 经常导致程序员,忘记某个变 ...

  9. Python基础——类new方法与单例模式

    介绍: new方法是类中魔术方法之一,他的作用是给类实例化开辟一个内存地址,并返回一个实例化,再由__init__对这个实例进行初始化,故它的执行肯定就是在初始化方法__init__之前了.new方法 ...

随机推荐

  1. java发展史与java的语言特性

    概述: Java 体系比较庞杂,功能繁多,这也导致很多人在自学 Java 的时候总是感觉无法建立 全面的知识体系, 无法从整体上把握Java 的原因. 在这里我们先简单了解一下Java 的版本. 具体 ...

  2. OD附加功能分析

    OD版本:OllyICE v1.10   在从文件菜单选择附加后,OD会在注册一个窗口类后,先创建一个0x138大小的进程表; 再是CreateWindowExA 创建窗口;   00478013 l ...

  3. 通过maven下载jar包

    准备 你得先安装Maven如果不会点击后面的连接查看一二步.http://www.cnblogs.com/luoruiyuan/p/5776558.html 1.在任意目录下创建一个文件夹,其下创建一 ...

  4. poj1251 最小生成树

    Description The Head Elder of the tropical island of Lagrishan has a problem. A burst of foreign aid ...

  5. json返回数据库的时间格式为/Date(1477294037000)/,怎样在前台进行格式化转换

    方法一: 原理是取中间的数,再转换成js的Date类型 function ChangeDateFormat(val) { if (val != null) { var date = new Date( ...

  6. AngularJS $http

    $http 是 AngularJS 中的一个核心服务,用于读取远程服务器的数据.在服务器上读取数据: <div ng-app="myApp" ng-controller=&q ...

  7. Hash(LCP) || 后缀数组 LA 4513 Stammering Aliens

    题目传送门 题意:训练指南P225 分析:二分寻找长度,用hash值来比较长度为L的字串是否相等. #include <bits/stdc++.h> using namespace std ...

  8. 51nod p1175 区间中第K大的数

    1175 区间中第K大的数 基准时间限制:1 秒 空间限制:131072 KB 分值: 160 难度:6级算法题   一个长度为N的整数序列,编号0 - N - 1.进行Q次查询,查询编号i至j的所有 ...

  9. BZOJ2164 : 采矿

    树链剖分+线段树,每个节点维护以下信息: (1)单独在某个点分配$i$个人的最大收益.可以$O(m)$合并. (2)分配$i$个人的最大收益.可以用$O(m^2)$合并. 时间复杂度$O(c(m^2\ ...

  10. Android自动化测试框架

    1.Monkeyrunner:优点:操作最为简单,可以录制测试脚本,可视化操作:缺点:主要生成坐标的自动化操作,移植性不强,功能最为局限:    2.Rubotium:主要针对某一个APK进行自动化测 ...