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. Android studio导入eclipse项目且不改变目录结构

    Android studio的安装与配置论坛当中已经有很多在此就不在细说了,现在开始说下如何在Android studio当中导入eclipse的项目且不改变其目录结构和配置,让使用eclipse的同 ...

  2. LayoutInflater(二)

    每一个视图的绘制过程都必须经历三个最主要的阶段,即onMeasure().onLayout()和onDraw(),下面我们逐个对这三个阶段展开进行探讨. 一. onMeasure() measure是 ...

  3. JSON详解以及可以把javabean转换成json串的json-lib应用

    JSON 1. json是什么 它是js提供的一种数据交换格式! 2. json的语法 {}:是对象! 属性名必须使用双引号括起来!单引不行!!! 属性值:null,数值,字符串,数组:使用[]括起来 ...

  4. [转载]C++声明和定义的区别

    <C++Primer>第四版 2.3.5节中这么说到: ①变量定义:用于为变量分配存储空间,还可为变量指定初始值.程序中,变量有且仅有一个定义. ②变量声明:用于向程序表明变量的类型和名字 ...

  5. hdu 1203 概率+01背包

    I NEED A OFFER! Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Sub ...

  6. SpringJMS解析2-JmsTemplate

    尽管消息接收可以使用消息监听器的方式替代模版方法,但是在发送的时候是无法替代的,在Spring中必须要使用JmsTemplate提供的方法来进行发送操作,可见JmsTemplate类的重要性,那么我们 ...

  7. hdu 3449 有依赖性的01背包

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=3449  Consumer Description FJ is going to do so ...

  8. XSS 跨站脚本攻击之构造剖析(一)

    1.XSS-Filter:跨站脚本过滤器,用于分析用户提交的输入,并消除潜在的跨站脚本攻击 (1)XSS Filter实际上是一段精心编写的过滤函数作用是过滤XSS跨站脚本代码: (2)绕过XSS F ...

  9. yii2.0 的数据的 改

    修改数据 /**     * 根据获取到的数据的id 去编辑对应的数据  controller层     */ //引入对应的model use app\models\About; //定义一个方法 ...

  10. Graphics 导出图片使用【这个主要是画图类图的使用,记录一下】

    /// <summary> /// 导出信令流程矢量图 /// </summary> /// <param name="signalFlowInfos" ...