黑马程序员—C#系列 (二)
来源:互联网 发布:在虚拟机上配置nginx 编辑:程序博客网 时间:2024/05/16 14:57
---------------------- ASP.Net+Android+IO开发S、.Net培训、期待与您交流! ----------------------
函数重载overload:
ref应用场景内部对外部的值进行改变,out则是内部为外部变量赋值,out一般用在函数有多个返回值的场所,让函数有多个返回值,充当一个返回值的效果。
out 也是 所有路径都要有返回值,不能存在没有返回值的情况
再根据char[]生成新的字符串,但是原先的字符串没有改变(他就在那里)
案例:截取字符串前5个---------------------- ASP.Net+Android+IO开发S、.Net培训、期待与您交流! ----------------------
1. 函数
目的是代码重用
命名规则:函数名开头大写,参数名开头小写,参数名、变量名要有意义
返回值:
1) 函数如果没有返回值则标记返回值类型为void
2) return语句:导致函数立即返回。在返回值为void的函数中return,在返回值非void的函数中return数值
2) return语句:导致函数立即返回。在返回值为void的函数中return,在返回值非void的函数中return数值
3) 函数答应返回int就必须返回int, 不能不返回,不能返回其他类型//所有路径都要有返回值,不能存在没有返回值的情况
练习 :提供一个函数,将用户提供的一个字符串重复n遍形成一个新的字符串
static string Repeat重复(string s,int n){ string t = ""; for(int i = 0;i < n;i++) { t = t + s } return t;}
练习:string[] strs={"aa","333","ccc"};
返回给我一个字符串,然后字符串使用我指定的分隔符来进行分割,比如我指定用"|"分割,那么返回给我"aa|333|ccc"。
返回给我一个字符串,然后字符串使用我指定的分隔符来进行分割,比如我指定用"|"分割,那么返回给我"aa|333|ccc"。
string[] strs = {"cc","bb","aa"}; static string Fenge(string[] strs,string s) { string newstrs = ""; for (int i = 0; i < strs.Length - 1; i++) { newstrs += strs[i] + s; } newstrs += strs[strs.Length - 1]; return newstrs; }
参数:
1) 确定函数参数的原则:自己能确定的数据自己内部解决,自己确定不了的数据通过参数传递
2) 参数默认值(C#4.0 vs2010) :
void SayHello(string name,int age=20)(*了解) int age = 20; //age可传可不传 ,不传的话age就是20
3) 默认值参数也必须放到非默认值之后,可以有多个
4) 函数参数默认是值传递的,也就是“复制一份”,传进来的的时候是复制了一份传进来,折腾的是复制品,不影响原来的值,外边的不会变
5) 参数数组:
int sum(params int[] values)int sum(string name,params int[] values)//可变参数数组必须是最后一个
构成重载的条件:同名的两个函数的签名(参数的类型、顺序,返回值的类型)不能完全一致;
和参数的名字无关;
函数的重载不关返回值类型;
函数的重载不关返回值类型;
只有参数的类型、顺序.个数不一致才能函数重名,函数返回值类型一致与否没关系
SayHello("XXX");SayHello("AK",47); static void SayHello(string name,int age) { Console.WriteLine("我是{0},我{1}岁",name,age); } static void SayHello(string name) { //用重载来实现参数默认值的效果,在构造函数中用的特别多 SayHello(name, 20); }
2.ref和out
ref (reference) 用ref之前必须给变量赋值
int i1 = 10;int i2 = 20; Swap(ref i1, ref i2);//传递引用。给ref传递参数的时候也要加上ref Console.WriteLine("i1={0},i2={1}",i1,i2);//结果为int i1=20 int i2=10 static void Swap(ref int i1, ref int i2)//reference→ref { //标记为ref就是要求调用者传递变量的引用 int temp = i1; i1 = i2; i2 = temp; }ref必须先初始化,因为是引用,所以必须先“有”,才能引用,而out则是内部为外部赋值,所以不需要初始化,而且外部初始化也没用。
ref应用场景内部对外部的值进行改变,out则是内部为外部变量赋值,out一般用在函数有多个返回值的场所,让函数有多个返回值,充当一个返回值的效果。
out 也是 所有路径都要有返回值,不能存在没有返回值的情况
//bool b= false;//不需要为out赋初值,赋了也白搭 bool b; int i = Parse(Console.ReadLine(), out b); if (b) { Console.WriteLine("成功,i={0}", i); } else { Console.WriteLine("错误"); } Console.ReadKey(); static int Parse(string s,out bool success) { //Console.WriteLine(success); if(s=="一") { success = true; return 1; } else if(s=="二") { success = true; return 2; } else { success = false; return -1; } }案例:int.TryParse
string s = Console.ReadLine(); int i; if (int.TryParse(s, out i)) { Console.WriteLine("成功:" + i); } else { Console.WriteLine("输入错误"); } Console.ReadKey();
3.字符串
string s="abc";//是声明一个变量s,把s指向"abc"这个字符串。字符串的不可变性:
C#中字符串有一个重要的特性:不可变性,字符串一旦声明就不再可以改变。所以只能通过索引来读取指定位置的char,不能对指定位置的char进行修改
如果要对char进行修改,那么就必须创建一个新的字符串,用s. ToCharArray()方法得到字符串的char数组,
对数组进行修改后,调用new string(char[])这个构造函数(暂时不用细研究)来创建char数组的字符串。
一旦字符串被创建,那么char数组的修改也不会造成字符串的变化
对数组进行修改后,调用new string(char[])这个构造函数(暂时不用细研究)来创建char数组的字符串。
一旦字符串被创建,那么char数组的修改也不会造成字符串的变化
例子:
string s = "afdasfddsafasdfads"; char[] chars = s.ToCharArray(); chars[2] = 'w'; //string s1 = new string(chars); s = new string(chars); //Console.WriteLine(s1); Console.WriteLine(s); Console.ReadKey();字符串是不可变的,所以要先生成一个char[],再对char[]进行修改
再根据char[]生成新的字符串,但是原先的字符串没有改变(他就在那里)
常用的字符串函数:
s.ToLower(); //把字符串转换为小写 s.ToUpper();//把字符串转换为大写 s.Trim(); //去掉字符串两端的空格,不会去掉中间的s.Equals(s2, StringComparison.OrdinalIgnoreCase); //Ingnore:忽略Case:大小写(CaseSensitive:大小写敏感) string.Format("我叫{0},我{1}岁","yzk",100);//用占位符、格式生成新的字符串 String.IsNullOrEmpty()string s1 = string.Join("|", values);//第一个参数是string类型分隔符
string[] Split(params char[] separator)//将字符串按照指定的分割符分割为字符串数组string[] Split(char[] separator, StringSplitOptions options)//将字符串按照指定的char分割符分割为字符串数组( options 取RemoveEmptyEntries的时候移除结果中的空白字符串)string[] Split(string[] separator, StringSplitOptions options)//将字符串按照指定的string分割符分割为字符串数组例子:
string line = Console.ReadLine();//1,3,5,6,6 string[] strs = line.Split(',','|');//因为分隔结果可能是多个,所以是string数组 foreach (string str in strs) { Console.WriteLine(str); }
string[] lines = System.IO.File.ReadAllLines(@"c:\root.ini", Encoding.Default);//从文本文件读取数据,返回值为string数组,每个元素是一行字符串替换:
string Replace(string oldValue, string newValue)//将字符串中的出现oldValue的地方替换为newValue取子字符串:
string Substring(int startIndex)//取从位置startIndex开始一直到最后的子字符串;string Substring(int startIndex, int length)//取从位置startIndex开始长度为length的子字符串,如果子字符串的长度不足length则报错。
案例:取s.Length-2,5中的最小值
string s = "abc12f"; //string s1 = s.Substring(2, s.Length - 2>5?5:s.Length - 2); //Math.Min返回两个参数中的最小值 string s1 = s.Substring(2, Math.Min(s.Length - 2,5)); Console.WriteLine(s1);
string s2 = s1.Substring(0, Math.Min(s1.Length, 5));//取字符串的长度和5中的最小值来截取,谁小取谁
bool Contains(string value)//判断字符串中是否含有子串value string s = "伟大的共产党召开大会"; if (s.Contains("共产党"))//判断字符串中是否含有子字符串 { Console.WriteLine("禁止发表"); } else { Console.WriteLine("可以发表"); } bool StartsWith(string value)//判断字符串是否以子串value开始; string s = "ATM我是你们的忠实听众"; if (s.StartsWith("ATM"))//是否以某个字符串开头 { Console.WriteLine("短信正确"); } else { Console.WriteLine("短信错误"); }bool EndsWith (string value)//判断字符串是否以子串value结束; int IndexOf(string value)//取子串value第一次出现的位置。 string s = "我北爱北京敏感词"; int i = s.IndexOf("北京"); //int i = s.IndexOf("南京"); //子字符串在字符串中第一次出现的位置(以第一个字符为序号) //如果不存在则返回-1 //Console.WriteLine(i);案例:
从Email中提取出用户名和域名:abc@163.com。
IndexOf找到@的位置。SubString。
要考虑Email地址错误的情况(必须含有@,并且@不能在最开始、最后出现),如果错误告诉用户。
IndexOf找到@的位置。SubString。
要考虑Email地址错误的情况(必须含有@,并且@不能在最开始、最后出现),如果错误告诉用户。
string email = Console.ReadLine(); if (!email.Contains("@") || email.StartsWith("@") || email.EndsWith("@")) { Console.WriteLine("Email地址不正确"); return; } int atIndex = email.IndexOf("@"); string username = email.Substring(0, atIndex); string domain = email.Substring(atIndex + 1); Console.WriteLine("用户名:{0},域名:{1}",username,domain); //if (错误) //{ //} //else //{ //}
- 黑马程序员—C#系列 (二)
- 黑马程序员—C#系列 (一)
- 黑马程序员—C#系列 (三)
- 黑马程序员—C#系列 (四)
- 黑马程序员—SQL系列 (二)
- 黑马程序员—HTML+CSS系列 (二)
- 黑马程序员-------C#学习笔记之二
- 黑马程序员--C#基础总结(二)
- 黑马程序员--c#学习总结(二)
- 黑马程序员-C#基础知识(二)
- 黑马程序员之c#面向对象二
- 黑马程序员:C#基础篇(二)
- 黑马程序员-C#基础知识(二)
- 黑马程序员—C#多线程
- 黑马程序员—C#继承
- 黑马程序员—C#委托
- 黑马程序员—c#基础知识。。
- 黑马程序员————————C#基础知识(二)
- PAT_1016: Phone Bills
- Smack开发Demo---发送并接收消息
- 最流行的Java制作报表的工具
- 微创业怎么样:微创业是否是以后的潮流?
- 数据库完整性
- 黑马程序员—C#系列 (二)
- jquery插件之表单验证插件
- teardown_appcontext()
- magento安装好之后后台登陆不进去的解决方法
- Java + jsf 实现 仿百度 全拼 简拼 汉字智能补全
- 从决策树学习谈到贝叶斯分类算法、EM、HMM
- 实现WebServices二:使用XFireSpringServlet与ServiceBean
- Ubuntu GCC 编译C++ 文件出错。main.o: In function `__static_initialization_and_destruction_0':
- CTLChart振动信号图形库编写历程