c#面向对象基础 类、方法、方法重载
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#面向对象基础 类、方法、方法重载的更多相关文章
- Java基础语法04面向对象上-类-属性-方法-可变参数-重载-递归-对象数组
类 面向对象是一种思想,一般指将事务的属性与方法抽出总结为模板(类/class),处理事务时通过类创建/new出对象由对象的功能/方法去完成所要计算处理的事情. 面向过程:POP:以过程,步骤为主,考 ...
- 02java基础——类和方法
1.类的定义 /* 定义类: 使用类的形式,对现实中的事物进行描述 事物: 属性,方法 属性: 变量 方法: 这个事物具备的功能 格式: public class 类名{ 属性定义 修饰符 数据类型 ...
- C#面向对象基础:virtual方法,abstract方法,区别
virtual 关键字用于修饰方法.属性.索引器或事件声明,并使它们可以在派生类中被重写.默认情况下,类中的方法是非虚的,非虚的方法不能在子类中被覆盖(override),但是可以隐藏(new),但这 ...
- python基础--类的方法
一:类的方法说明 类的方法分为实例方法,析构方法,构造方法,类方法,静态方法,属性方法,等等 类方法和静态方法都可以被类和类实例调用,类实例方法仅可以被类实例调用 类方法的隐含调用参数是类,而类实例方 ...
- C#面向对象基础 —— 类与对象
文章来源: https://www.cnblogs.com/huluobozu/p/5070500.html 一.类与对象 类是面向对象编程的基本单元:类造出来的变量叫对象. 一个类包含俩种成员:字段 ...
- C#面向对象基础--类与对象
1.类与对象 类是面向对象编程的基本单元:类造出来的变量叫对象. 一个类包含俩种成员:字段与方法. 字段即变量,方法即函数. 面向对象思想:教给我们如何合理的运用类的规则去编写代码. 2.类的字段 字 ...
- python基础--面向对象基础(类与对象、对象之间的交互和组合、面向对象的命名空间、面向对象的三大特性等)
python基础--面向对象 (1)面向过程VS面向对象 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. ...
- Python 面向对象基础(类、实例、方法、属性封装)
python是面向对象语言,一切皆对象. 面向过程: 变量和函数. “散落” 在文件的各个位置,甚至是不同文件中.看不出变量与函数的相关性,非常不利于维护,设计模式不清晰. 经常导致程序员,忘记某个变 ...
- Python基础——类new方法与单例模式
介绍: new方法是类中魔术方法之一,他的作用是给类实例化开辟一个内存地址,并返回一个实例化,再由__init__对这个实例进行初始化,故它的执行肯定就是在初始化方法__init__之前了.new方法 ...
随机推荐
- T-SQL中只截取日期的日期部分和日期的时间部分
SQL Server 中截取日期的日期部分: ),) SQL Server 中截取日期的时间部分: ),) ),DD_133,)
- hibernate基础的CRUD的操作
保存记录 session.save(customer); 根据主键进行查询 Customer customer = (Customer)session.get(Customer.class ,1); ...
- HDU 5867 Sparse Graph (2016年大连网络赛 I bfs+补图)
题意:给你n个点m条边形成一个无向图,问你求出给定点在此图的补图上到每个点距离的最小值,每条边距离为1 补图:完全图减去原图 完全图:每两个点都相连的图 其实就是一个有技巧的bfs,我们可以看到虽然点 ...
- strcmp函数的使用
Action() { /********************************* * Author:旺仔 * object:strcmp * date:2015-12-09 ...
- vim 标准环境的配置
最近刚刚从IDE转到了vim,很多习惯不一致,特地配置了一下vim环境.在网上找了大神的帖子,怕忘记了,特此纪念. 传送门 http://www.cnblogs.com/ma6174/arch ...
- hdu1710 二叉树的遍历
Problem Description 已知前序和中序 求后序 Input The input contains several test cases. The first line of each ...
- nefu1118 最长上升子序列(LIS)
discription:定义臻.排序数列如下:一个数列删去其中一个数后是从小到大排好序的,称这个数列为臻.排序数列.现在给你一个数列,判断它是否为臻.排序数列. intput:多组输入数据,每组有两行 ...
- Swift3.0语言教程使用Unicode范式标准化获取字符串
Swift3.0语言教程使用Unicode范式标准化获取字符串 Swift3.0语言教程使用Unicode范式标准化获取字符串,在NSString中可以使用4个属性去使用Unicode范式标准化获取字 ...
- HDU4511 小明系列故事——女友的考验(AC自动机 + DP)
题目大概说有平面有n个点,从1点出发走到n点,每一步只能走到序号比当前更大的点且走的序列不能包含给定的m个序列中的任何一个,问1走到n的最短路. 用m个序列建个AC自动机,后缀包含整个序列的结点标记一 ...
- Windows和Linux(Ubuntu)下安装Scala及ScalaIDE
1.下载 1.1Scala下载 Windows版:http://www.scala-lang.org/download/ Linux版:http://www.scala-lang.org/downlo ...