C#编程基础(五)
1、C#程序的基本结构
using System;
namespace xxxx //定义一个命名空间
{
class yyyy //定义一个类
{
//Main函数:主函数,程序的入口和出口
public static void Main()
{
}
}
}
2、如何实现程序输出?
Console.Write("输出的内容"); //不会换行
Console.WriteLine("输出的内容"); //自带换行
Console.WriteLine("格式占位符",数据);
eg:
Console.WriteLine("你好,张三!");
Console.WriteLine("你好,{0}!","张三");
Console.WriteLine("你好,{0}!我是{1}!","张三","你爸");
3、如何控制输出内容的格式?
常见的转义字符
\n Enter键效果、换行
\t Tab键效果、制表符
\\ \
\" "
\' '
@ 取消转义
Console.WriteLine("你好,{0}!\n我是{1}!","张三","你爸");
Console.WriteLine("姓名\t年龄");
Console.WriteLine("小明\t\"10\"");
Console.WriteLine("小小明\t2");
Console.WriteLine("C:\\1.txt");
Console.WriteLine(@"C:\1.txt");
Console.WriteLine(@"aaaa\nbbbb"); //aaaa\nbbbb
二、数据类型
1、程序经常要处理各种各样的数据,要处理的数据首先要在程序中表示出来,如何表示程序的数据呢?
2、程序中的数据如何表示?
1)第一点就是要知道数据是何种类型:在C#中,数据常见的基本类型有:
1、数据类型常见的有:
类型 关键字 占用的空间大小 举例
整型 int 4字节 月份:9
单精度浮点型 float 4字节 圆周率:3.14f
双精度浮点型 double 8字节 圆周率:3.14
decimal型 decimal 财产:1000000.0m
布尔型 bool true/false
单字符 char 1字节 一个字符:'A','\n',' ','9'
字符串 string 任意个字符:"小明","男","A",""
2、数据类型:
整型:int
浮点型:
单精度:float 3.14f
双精度:double 3.14
decimal型:财务计算、金额的表示
decimal 3.14m
布尔型: bool ---> true/false
单字符:char 'A','1'
字符串:string "abc","","a"
a、整型:
整数类型,比如年份2021,年龄18等都是整型
最常用的关键字是:int (用4个字节来存储)
表示数据的范围是-2(31)~2(31)-1
超出这个范围,就不能正确表示
b、浮点型:
带小数点的数,比如身高1.8、体重50.5等分成单精度浮点型和双精度浮点型
单精度浮点型:float (用4个字节来存储)
精确到7位以内
双精度浮点型:double (用8个字节来存储)
精确到15/16位以内
如果在表示数据时没有说明,默认是双精度的。
比如 1.5是双精度的后面加f或F就是单精度的:1.5F
c、decimal型:
关键字是decimal,通常用于财务方面的计算。
128位高精度的十进制数!!精确小数28位!
后面加m/M就表示它是decimal型:
比如 1.5m
d、布尔型:
关键字是bool
用于表示两种逻辑值:true、false
true:真的,正确的,是
false:假的,错误的,否
e、单字符型:
关键字是char 表示一个字符,比如一个字母,一个标点符号 要用单引号引起来 eg: 'a'、' ' (一个字母、空格) ':' (一个标点) '0' (一个数字符号) '\n'(一个转义字符)
f、字符串型:
关键字是string 表示多个/任意个字符组成的文本,要用双引号引起来 eg: "张三"、"15991654646"、 "a"、""(空字符串:0个字符)、 "0"、"123" 举例:表示数据第一步就要确定数据是什么类型? 图书序号: 图书名称 价格 作者 出版社 出版年份 是否借出
2)要保存数据,还要有一块存储空间。
意味着我们要在内存中开辟一块存储空间出来,才能保存数据。 变量:就是在内存中开辟一块存储空间。相当于酒店中的一间单人房。
a、 如何开辟存储空间?(定义变量)
1、变量:在内存中开辟的一块存储空间,用于保存数据。 变量的定义:数据类型 变量名; eg: string a="tom"; //定义一个字符串型的变量a string b,c; //一次定义多个变量 decimal bookPrice=9.9m; // 骆驼命名法 bookPrice=29.9m; //再次赋值 往变量(存储空间)中保存数据:赋值 2、把变量输出到控制台中: Console.WriteLine("价格:{0}",bookPrice); 语法: 数据类型 变量名; //多个变量用,隔开 eg: int age; // 定义一个整型的变量age string name; // 定义一个字符串的变量name int a,b,c; //定义三个整型变量a,b,c float a1,b1; //定义单精度浮点型变量a1,b1 string qq; 2、变量:存储数据的一块存储空间(内存中的) 定义变量,并存入数据(=赋值),输出: int a=2021,b=1000; Console.WriteLine("{0}",a); //2021 a=b; Console.WriteLine("xxxx:{0}",a); //1000
b、变量的命名规则:
(1)变量名只能有数字、字母和下划线组成; (2)不能以数字开头; (3)不能跟C#关键字、函数名一样, 比如 int char;// 错误的 (4)建议用骆驼命名法命名,从第二个单词开始首字母大写; 一般用含义相近的英文单词表示变量名,可提高程序的可读性。 比如: string xingMing; int age; string yourCode; string myName; string myBankCard;
3)赋值
接下来,就可以将数据存入变量(存储空间)中,用=就可以将数据存入变量了(赋值)。 int a1=100; //定义变量a1,存入整数100 int a2=100,a3=200;//定义变量a2和a3,分别存入100和200 float a4=1.9f; //单精度后加f double a5=1.9; decimal a6=10000.0m; //decimal型后加m bool a7=true; //布尔型 char a8='A'; //单字符要单引号引起来 string a9="hello"; //字符串要双引号 注意: =左右两边的类型要一致。 赋值,还可以: // 定义变量时赋值 int a=1,b=2; int c=a+b; //把表达式结果赋给变量 int d=c; // 把一个变量赋给另一个变量 // 针对变量进行多次赋值 d=100; // 在定义变量之后赋值 d=200; d=10000; int x; x=1000; // 在定义变量之后赋值
3、如何在控制台输出变量中的数据。
string name="李四"; int age=100; float height=1.5f,weight=30.5f; // 输出变量的值 Console.WriteLine(name); // 要加上提示: Console.WriteLine("姓名:" + name);// +表示连接 // 最常用的:格式占位符 Console.WriteLine("姓名:{0}",name); Console.WriteLine("姓名:{0},年龄:{1}岁",name,age);
4、类型转换:
类型转换: 在赋值过程中,一般都是要保证=两边类型一致,比如: int a=100+200; // 两边都是整型 float b=1.5f; // 两边都单精度浮点型 在实际中,也有可能出现两边类型不一致的情况,比如: float c=100; // 左边是float,右边是int 如果类型不一致时,就要进行类型转换,让两边类型保持一致。
1)隐式转换:
类型转换的方式有3种: 隐式转换:由系统自动进行,不需要我们干预。 在什么情况下会发生隐式转换? 左边类型大,右边类型小的时候发生隐式转换, 系统会自动把右边的小类型转成左边的大类型数据! 类型的大小关系: char<int<=float<double eg: float a=100; //float>int double b=1.5f; //double>float int c='A'; //int>char float d='B'; //float>char 这些都是正确的写法。 系统自动(左边大,右边小的时候) int a='A'; float b=100; //char<int<=float<double double c=b; double d='C';
2)显式转换:
显式转换:也叫强制转换。 在左边类型小,右边类型大的时候需要显式转换。 eg: int a=1.5; // 左边int,右边double char b=100; // char<int 这些编译会出错! 显式转换的语法: (要转成的类型)(表达式) eg: int a=(int)1.5; //左边是什么类型就写什么类型的关键字 char b=(char)100; 注意:显式转换不能用于string、bool类型。 左边小,右边大的时候(string,bool不可用) int a=(int)1.5; double d=10.2; float b=(float)(a+d); decimal c=(decimal)(10.5+5.5);
3)转换方法:
a、Parse()方法:
使用特定方法进行类型转换: parse()方法:用于字符串类型转成其它类型 eg: string str="123"; //字符串 int a=int.Parse(str); // 将str转成int类型 通过控制台输入各种类型的数据: 输入字符串: string a=Console.ReadLine(); 输入整数: int b=int.Parse(Console.ReadLine()); 输入浮点数: float c=float.Parse(Console.ReadLine()); double d=double.Parse(Console.ReadLine()); decimal e=decimal.Parse(Console.ReadLine()); 输入单字符: char f=char.Parse(Console.ReadLine()); string--->其它类型 int a=int.Parse("13123");
b、ToString()方法:
(2)ToString():其它类型转成字符串类型 该方法来源于Object类。 语法: 数据.ToString() eg: //int-->string string a=123.ToString(); //整数123转字符串 //等价写法: //123.ToString()与123+""是一样效果 int b=12312312; string c=b.ToString(); //整型变量转字符串 其它类型--->string int number=123123.5; string a=number.ToString(); string b=number+""; string c=number.ToString("F2");//带上格式 Console.WriteLine("{0:F2}",number);
c、Convert类:
Convert类:“万能”类型转换,实现任意两种类型之间的转换 1、Convert.ToInt32():其它类型转成int型 eg: int a=Convert.ToInt32("123"); int b=Convert.ToInt32(1.5+2); 2、Convert.ToSingle():其它类型转成float型 eg: float a=Convert.ToSingle("123"); float b=Convert.ToSingle('A'+1.5); //float c=(float)('A'+1.5); 3、Convert.ToDouble():其它类型转成double型 eg: double a=Convert.ToDouble("123.5"); 4、Convert.ToBoolean():其它类型转成bool型 eg: bool a=Convert.ToBoolean("true"); 5、Convert.ToChar():其它类型转成char型 eg: char a=Convert.ToChar("A"); //char b=char.Parse("A"); 6、Convert.ToString():其它类型转成string型 eg: string a=Convert.ToString(123.5);//不建议使用 string b=123.5.ToString(); string c=123.5+""; 7、Convert.ToDecimal():其它类型转成decimal型 eg: decimal a=Convert.ToDecimal("1.25"); 具体应用: //输入整数 int x=int.Parse(Console.ReadLine()); int y=Convert.ToInt32(Console.ReadLine()); //输入单精度 float x=float.Parse(Console.ReadLine()); float y=Convert.ToSingle(Console.ReadLine()); 任意两种类型之间的互转 Convert.ToInt32() Convert.ToSingle() Convert.ToDouble() Convert.ToDecimal() Convert.ToBoolean() Convert.ToChar() Convert.ToString() int a=Convert.ToInt32(1.5+10+20.1);
5、输入函数:
1、输入函数:Console.ReadLine() 可以接收一行数据的输入,接收的数据默认是string类型。 只负责接收输入,不负责存储,需要用变量进行保存。 eg: string name=Console.ReadLine(); //接收字符串数据 string s1=Console.ReadLine(); // 输入字符串 int a=int.Parse(Console.ReadLine()); // 输入整数 int a=Convert.ToInt32(Console.ReadLine()); // 输入整数
三、运算符
1、运算符有4类:赋值运算符
赋值符号左边一定是变量名
1)基本赋值:
=,把数据赋给变量 用法: 变量名=值 int a=10; a=20; a=10+20+30;
2)复合赋值:
+=(累加)、-=、*=、/=、%= int a=10; a+=20; //相当于a=a+20 ,所以a=30 a+=30; //相当于a=a+30, 所以a=60 a-=20; // 相当于a=a-20; 所以a=40 a*=3; // 相当于a=a*3;所以a=120 a*=2+1; // 相当于a=a*(2+1),所以a=360 a/=5; // 相当于a=a/5;所以a=72 a%=5; // 相当于a=a%5; 所以a=2
2、算术运算符:
1) ++ : 自增1 eg: int a=10; //想让a增加1,变成11 //a=a+1; //a+=1; //a++; //a=11 //a++; //a=12 a++; // 后缀++ ++a; // 前缀++ //如果计算式子只有一个++的符号,前缀和后缀没有区别 //如果计算式子有多个符号,前缀和后缀就有区别 //区别在于优先级的不同: 前缀优先级很高(要先计算), 后缀优先级很低(最后计算)。 eg: int a=10; //int x=a++; //后缀++最后计算 //x=10 a=11 int x=++a; //前缀++要先计算 //a=11 x=11 eg: int a=1,b=2; //int x=a+(++b); //x=4 int x=a+(b++); //()不影响++的优先级。x=3 eg: int a=10; //int x=a--; //x=10 a=9 int x=--a; //x=9 a=9 2) +、-、*、/、%、++、-- int a=+1,b=2; //+1:正1 (正号) int c=a+b; //加法,c=3 string s1="2020"; string s2=s1+"年"+10+"月"; //字符串连接,s2="2020年10月" int d=-100; // 负号 int e=a-b; // 减法 int f=a*b; // 乘法 int g=a/b; // 除法 %:求余数,两个相除后的余数。也叫“取模运算” int x=10%3; //10除以3,余数是1 。故x=1
3、关系运算符:
>、>=、<、<=、==(等于),!=(不等于) 主要用于两个数大小的比较。 关系表达式的结果只有两种:true和false(布尔类型的结果)
4、逻辑运算符:
&&(与)、||(或)、!(非)
1) &&:与运算符
1、表示并且的含义。在多个条件同时要满足的时候使用! 运算规则:A&&B A和B同时为true,式子结果为true A和B只要一个为false,式子结果就为false eg:判断一个数x是否在0~100区间内的情况。 x>=0&&x<=100 当x=30,式子结果是:true 当x=150,式子结果是:false 当x=-1,式子结果是:false 2、&&运算符有短路运算的特点: 当第一个条件为false,后面条件就不需要计算 eg: int a=1,b=2; bool c=a>b&&(b=3)<3; Console.WriteLine("b={0}",b); //b=2
2)||:或运算符
1、表示或者的含义。在多个条件只要满足其中一个就可以的时候使用! 运算规则:A||B A和B同时为false,式子结果为false A和B只要一个为true,式子结果就为true eg:期末要考理论x和上机y两门课,只要一门不及格, 全部要重考! x<60||y<60 当x=40,y=80,式子结果是:true 当x=90,y=70,式子结果是:false 2、||运算符有短路运算的特点: 当第一个条件为true,后面条件就不需要计算 eg: int a=1,b=2; bool c=a<b||(b=3)<3; Console.WriteLine("b={0}",b); //b=2
3)!:非运算符
1、表示不的意思。 运算规则:!A 得到条件的相反的结果 A为true,结果是false A为false,结果是true eg: int a=10; Console.WriteLine("{0}",!(a>1)); //false Console.WriteLine("{0}",!(a>100)); //true 有了非运算符,写条件时就可以有正面、反面的不同角度。 eg:判断一个数a是否大于0 条件的写法: a>0 从正面角度写条件 !(a<=0) 从反面角度写条件
四、C#中程序常见的3种结构:
1、选择结构(流程分支结构)
1)选择分支结构:if
第一种形式的语法: if(条件) { 条件满足的时候要做的事情; } 条件是通过关系运算符、逻辑运算符组成布尔型的表达式! 选择结构: f语句:有3种形式 a、形式1: if(条件) { 条件成立时,要做的事情; } b、 形式2:提供了两个分支(两种情况二选一的时候用) if(条件) { 条件成立时,要做的事情; } else //否则 { 条件不成立时,要做的事情; } 如果xxx,就做什么;否则,就做别的什么 条件运算符: ?: eg: int a=-10; int b=a>0?100:200; //b=200 double c=a<100?1.0:2.0; //c=1.0 string d=a==0?"hello":"hi";d="hi" c、形式3:阶梯if if(条件1) { 当条件1成立时,要做的事情; } else if(条件2) { 当条件2成立时,要做的事情; } else if(条件3) { 当条件3成立时,要做的事情; } .... else { 当所有条件不成立时,要做的事情; }
2)switch语句:
开关语句,多路选择结构。常用于等值判断。 语法: switch(判断对象) { case 值1:语句块;break; case 值2:语句块;break; ... default:语句块;break; } 说明: 1、判断对象常是bool、int、char、string型的变量或表达式; 不能是float、double、decimal类型 2、case语句可以有多个,每个case代表一种情形; 3、case后一般跟常量/变量值,表示当判断对象等于该值时,就会执行后面的语句块! 4、break语句:跳出switch结构;执行到break语句时,就意味着switch结构执行完成! 5、default:默认。当判断对象跟case后任何一个值都不相等的时候,就会执行default语句。 default语句相当于if结构中的else语句! default语句最多只有1条. 6、case和default语句的顺序可以调整!
2、循环结构:
1)C#中有4种循环结构:for、while、do...while、foreach
循环结构用于解决什么样的问题? 解决某种操作(比如输入、输出、计算、判断等)重复做的问题。 eg:输出1~10000. (输出这个动作是重复的) Console.WriteLine("1"); Console.WriteLine("2"); ... Console.WriteLine("10000");
a、for循环的语法:
for(表达式1;表达式2;表达式3) { 循环体(要重复做的事情);//4 } 表达式1:用于表示循环的起点,从什么时候开始循环。一般是赋值表达式。 eg: int i=1; 表达式2: 用于表示循环进行的条件,条件成立时继续循环过程;条件不成立,循环就结束。 (也说明了循环的终点在哪!) 一般是布尔表达式。 eg: i<=100 表达式3: 用于表示循环变化过程。 这个式子一般叫“步长”。 一般是(复合)赋值表达式。 eg: 步长是1(每步增加1) i++; 或 i=i+1; // i+=1 循环执行过程:
b、while循环:
1、当型循环 while(条件) { 重复做的操作;(循环体) } 含义:当条件成立时,一直重复做...操作。 当条件不成立,循环结束。 一个for循环改成while循环: for(1;2;3) 1; { while(2) 4; ==> { } 4; 3; }
c、do...while循环:
do { 重复做的操作; }while(条件); //有分号结束!! 含义: 重复做什么操作,直到条件不成立;
2)do...while和while/for的区别:
1、while/for循环是先判断条件,再执行循环体; 2、do...while循环是先执行一次循环体,再判断条件; 3、while/for循环最少的循环次数为0次,do...while循环最少的循环次数为1次。
3)死循环改写:
一般情况下,一个for循环改成do...while循环: 1、for(1;2;3) 1; { do 4; ==> { } 4; 3; }while(2); 2、 for(;;) while(true) { { ==> } } eg: for(int i=1;i<=10;i++) { Cw(i); } 等价于: int i=1; while(i<=10) { Cw(i); i++; } 3、 for(;;) do { { ==> } }while(true); eg: for(int i=1;i<=10;i++) { Cw(i); } 等价于: int i=1; while(i<=10) { Cw(i); i++; }
五、VS
1、VS常见文件后缀:
.sln:解决方案文件 .csproj:c#项目文件 .cs:c#源代码文件
2、C#项目的运行目录:
bin/debug
3、程序运行和其它快捷键
F5:调试运行 (自动退出界面,解决办法: 在代码最后加一句Console.ReadLine(); ) Ctrl+F5:不调试运行(不会自动关闭) 注释代码:ctrl+K+C 解除注释:ctrl+K+U 全屏/解除全屏:alt+shift+enter
六、数组
1、程序中经常要存储数据:
1)用变量来存储。
eg: int age=18; string name="张三"; 一个变量存一个数。 问题:存储36个同学的考试成绩,怎么存? 如果用变量存储,要定义36个变量!! eg: int a,b,c,d,e,f,g...; //36个 这样写是很麻烦,或许说是不现实的。
2)用数组来存储。
数组:存储多个相同类型数据的集合。 一个数组可以保存多个同类型的数据!!
2、定义数组:
数据类型[] 数组名称; 数组名称跟变量名一样,要符合命名规则。 eg: int[] arr; //定义了一个int类型的数组arr string[] arr2; //定义了一个string的数组arr2
3、数组初始化:
数组要经过初始化之后才能使用。 初始化写法:
1)直接赋值
数组能够存多少个数,取决于它有多少个存储空间 存储空间的个数叫数组的长度。 eg: int[] arr={1,2,3,4,5};//数组长度为5 string[] names={"张三","李四","王五"};//数组长度为3 char[] cs={'A','B','C','D'};//数组长度为4
2)用new关键字:
如果一开始不知道存哪些具体的数。 eg: int[] arr=new int[5];//数组长度为5 string[] names=new string[3];//数组长度为3 char[] cs=new char[4];//数组长度为4
3)前2种混合写法:
eg: int[] arr=new int[5]{1,2,3,4,5}; int[] arr=new int[]{1,2,3,4,5};//省掉长度,正确的 int[] arr=new int[5]{1,2}; //错误的 int[] arr=new int[2]{1,2,3,4,5};//错误的 注意:数组一旦初始化完成后,长度将不能变化。 eg: int[] arr=new int[5]; 就只能存储5个数,不能自动扩容变成可以存更多数的数组。
4、数组中存储多个数,如何去访问其中的某个数?
数组元素的访问方式:通过下标(索引)访问元素 下标从0开始,第一个数下标为0,第二个数为1,.... 最后一个数下标为"数组长度-1" eg: int[] a={100,123,12,33,412,123,4}; Console.WriteLine(a[0]); //100
5、数组输入输出(遍历):配合循环结构!
int[] arr = new int[5];// 保存5个人的年龄 // 输入 for (int i = 0; i < arr.Length; i++) { Console.Write("输入第{0}个人的年龄:",i+1); arr[i]= int.Parse(Console.ReadLine()); } // 输出 for (int i = 0; i < arr.Length; i++) { Console.WriteLine("第{0}个:{1}",i+1,arr[i]); }
6、foreach循环:通常用于遍历数组或集合。
语法: foreach(数据类型 变量 in 数组名) { 要重复做的操作; } eg: int[] arr = { 10, 123, 123, 4, 314, 4, 23, 4 }; // foreach遍历 // var:匿名类型,运行时自动确定变量的类型 // item:是一个迭代变量,用来保存遍历到的某个元素 // 代表数组元素 // 注意: 不能给变量item赋值 // 数组的输入不能用foreach foreach (var item in arr) { //if (item>200) //{ // break; //} Console.WriteLine(item); //if (item%2==1) //{ // Console.WriteLine(item); //} }
七、回顾数据在程序的表示和存储
1、保存一个人的姓名,一个数据
保存方式:定义变量 string name="张三"; 保存某一个值的时候用变量。
2、保存10个人的姓名,用数组。
数组:用来保存多个同类型的数据! string[] names={.....};
3、保存一个人的姓名、年龄、性别、电话等信息,怎么做?
一般想到,用多个变量保存: string name="张三"; int age=10; string sex="男"; string phone="15646473"; 问题在于:数据之间没有关联性(没有关系) 解决办法:用类与对象的知识!!
八、类与对象:
1、类:
字面意思就是类型,类别,分类。 类用于表示某一类事物, 一种事物就是一个类。 eg:所有的人,就是人“类”; 所有的狗,就是狗“类”
1)定义类:
语法: [访问修饰符] class 类名 { 类的成员; } 说明: 1)class是定义类的关键字 2)访问修饰符可选的,修饰类的访问修饰有: public:公开的,本项目和其它项目都可以用 internal:内部的,本项目可以用(默认) 3)类名:要用大写字母开头,建议用帕斯卡命名法 class Student { } 骆驼命名法:第二个单词开始字母大写 eg:myStudentAge 帕斯卡命名法:所有单词首字母大写 eg:NanFangStudent 复习类的定义 class Teacher { //字段 int code; //属性 public int Code { get{return code;} set{code=value;} } //==>简化:自动属性 //pubic int Code{get;set;} //构造函数:用于创建对象的数据初始化 public Teacher() { } public Teacher(int code) //带参 { this.Code=code; } }
2)类的成员:
1)字段:用于保存特征值的变量 语法: [访问修饰符] 数据类型 字段名; eg: int code; // 学号字段 string name; // 姓名字段 说明:字段的访问修饰符常用的有: public:公开的 private: 私有的(默认,一般都用这个) 字段名一般小写开头!! 2)属性:用于包装字段,间接对外公开字段,方便外部使用 语法: [访问修饰符] 数据类型 属性名 { get{return 字段名;} set{字段名=value;} } 访问修饰符一般用public!! 属性名一般大写开头!! get访问器:包装读操作 set访问器:包装写操作 属性分成三种类型: (1)可读可写属性:get和set同时有(最常见) (2)只读属性:只有get (3)只写属性:只有set
2、对象:
表示事物中的具体一个。 eg:所有学生中,“张三”这个学生是具体的一个, 就称为对象. 对象的三要素:属性、方法、事件 属性:表示对象的特征,比如说 一个人的姓名、性别、年龄、身高等就是属性。 方法:表示对象的行为,它能做什么。 比如学生会学习、会开小差等 事件: (暂时不学!) 表示对某个动作产生的反应。 拿具体的两个人来说: 张三有姓名、年龄、性别的特征(属性),有学习的行为 李四也有这些特征和行为 王五也有。。。。 N个对象都有共同的特征和行为,就可以把他们归为一类。 所以在这类事物中,每个个体(对象) 都有共同的特征和行为。
1)定义对象:用new关键字
语法: 类名 对象名=new 类名(); (对象名就是变量名) eg: Student zs=new Student();//创建一个对象zs 总结: 1)创建类的模板代码:(到今天为止) class 类名 { private 数据类型 字段名; .... // 字段可以有N个 public 数据类型 属性名 //属性跟字段对应 { get{return 字段名;} set{字段名=value;} } } 2)创建对象和对象使用的模板代码: 类名 对象名=new 类名(); //创建对象 对象名.属性名=值; //给属性赋值 Cw(对象名.属性名); //使用属性
2)对象的创建
Teacher t1=new Teacher();//调用无参构造 Teacher t2=new Teacher(1000);//调用带参构造 //如何访问属性: 对象名.属性名 // t2.Code
3、类与对象的关系:
类表示群体,泛指的 对象表示个体,特指的 类是对象的模板,对象是类的实例(实际存在的一个例子)。
九、方法
1、 一种事物 类 外观/特征(是什么) 属性 能做什么?(作用) 方法 2、 class Computer { //型号、厂家、价格 // 字段 string type; string factory; decimal price; // 属性:为了把字段对外公开 public string Type { get{return type;} set{type=value;} } ... //构造函数 public Computer() { } public Computer(string t,string f,decimal p) { this.Type=t; this.Factory=f; this.Price=p; } // 方法:用于描述行为、功能 // void: // 其它:int、char、float.... public void Open() // 开机的方法 { cw("电脑开机中...."); //当类型为void时, //不能出现return语句 } // 打印的方法:打印什么内容 public bool Print(string content) { if(...) { Cw("打印"+content); return true; } else { return false; } } } Computer c1=new Computer(); c1.Type="联想9527"; // 对象名.属性名 c1.Factory="联想"; c1.Price=5555; Computer c1=new Computer("联想9527","联想",5555); // 方法调用:对象名.方法名 c1.Open(); bool x=c1.Print("hello");// 有返回值 3、数组作为参数传递 4、方法两种类型:实例方法和静态方法两类。
1、方法的概念:
由一系列语句组成的代码块。 在类中,方法用于描述对象的行为(能做什么,就是功能!)。 一般来说,要实现一个功能,就可以用一个方法表示。 eg: 软件的登录是一个功能,在实现时就可以写 一个关于“登录”的方法。
2、 方法的意义:
1)降低软件的设计难度,把软件根据功能进行拆解,一个一个功能实现。 这种思想叫“分治”。 2)实现代码的重用,方法写一次,可以被使用多次。 这种思想叫“复用”。
3、方法分类:实例方法和静态方法两类。
1)实例方法(非静态方法): public void Study() { } 对象名.Study(); // 调用 静态方法:定义时多了一个关键字:static public static void Study() { } 调用时不一样,要按“类名.方法名”进行调用 类名.Study(); 2)实例方法:属于对象,调用:对象名.方法名 class Test { public void A() { } } 调用: Test t=new Test(); t.A(); 静态方法:属于类,调用:类名.方法名 class Test { public static void A() { } } 调用: Test.A();
1)实例方法的定义:
语法: [访问修饰符] 数据类型 方法名([形式参数]) { 实现功能的代码;(方法体) [return 值;] } 说明: 1)访问修饰符:public/private,一般用public 因为方法一般都会给外面使用! 2)数据类型:表示该方法的反馈结果数据的类型。 反馈结果是以数据的形式给用户的。 这数据是什么类型,就写什么类型的关键字。 eg: 查询余额时,反馈结果是decimal类型 常见类型关键字: int\char\float\double\bool\decimal\string\数组\类 void:空的 如果数据类型是void,表示没有反馈结果; 如果是其它关键字,表示有反馈结果。 反馈结果在这里叫“返回值”。 如何给使用者反馈? 在方法体中,通过return语句进行反馈!! return 值或表达式; //返回某个值 3)方法名:公开的方法用大写开头 4)方法的参数:可选,没有参数叫无参。 定义语法:跟定义变量类似 eg: int a,int b 在方法调用过程中,实际参数的值 会传递给形式参数接收。 eg: public int Add(int a,int b) { return a+b; } //调用 对象名.Add(10,20);//其中:10传给a,20传给b
2)实例的方法的调用:
语法: 如果方法无返回值: 对象名.方法名([实际参数]) 如果方法有返回值: 变量=对象名.方法名([实际参数])
4、方法重载:
问题:在一个类中,能否定义多个同名的方法? 是可以的,但是参数个数或类型不同 方法重载:在同一个类中,多个方法名称相同,但参数个数或类型不同
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏