目录

学习目标:

学习内容:

学习时间:

学习产出:

C#封装

C#方法

C#可空类型

C#数组

C#字符串


学习目标:

  • 手打代码,并把所有代码封装成函数,在入口函数调用即可。一个main只有一个readline
  • 用正则表达式判断输入是否为数字
  • 封装,方法,可空类型,数组,字符串

学习内容:

早上被骂的经验:

  1. 定义:只能定义在同级,父级不可以(最好不要在类里public一个变量,放方法里)
  2. model是一个类似属性的东西,要用直接调用再重写
  3. 所有入力值都要进行空指针判断,空值(IsNullOrWhiteSpace)判断等check。如果验证空指针异常,在传入值时就判断,只要不存在,跳到其他地方,终止处理。
  4. 变量名不可以大写,见名知义!
  5. 待学:注解、抽象类、增删改查一览详细

学习时间:

  • Day2:周一上午10点-下午5点(中间休息两小时左右)

学习产出:

  • 代码方法封装
  • CSDN 技术笔记 1 篇

C#封装

设置使用者的访问权限,并通过 访问修饰符 来实现

  • public:所有对象都可以访问;
  • private:对象本身在对象内部可以访问;
  • protected:只有该类对象及其子类对象可以访问
  • internal:同一个程序集的对象可以访问;
  • protected internal:访问限于当前程序集或派生自包含类的类型。

在菜鸟看到一个很有意思的说法,引用一下,很好理解了。

比如说:一个人A为父类,他的儿子B,妻子C,私生子D(注:C是外人,即不同类,D是A的子类但是不在同一个家里住(就是不是同一个命名空间))

如果我们给A的事情增加修饰符:

  • public事件:地球人都知道,全公开
  • private事件:只有A知道(隐私?心事?)
  • protected事件:A,B,D知道(A和他的所有儿子知道,妻子C(外人)不知道)
  • internal事件,A,B,C知道(A家里人都知道,私生子D不知道)
  • protected internal事件,A,B,C,D都知道,其它人不知道

C#方法

定义方法:即声明它的结构的元素

<Access Specifier> <Return Type> <Method Name>(Parameter List)
{Method Body
}Access Specifier:访问修饰符
Return type:返回类型,一个方法可以返回一个值。返回类型是方法返回的值的数据类型。如果方法不返回任何值,则返回类型为 void。
Method name:方法名称,是一个唯一的标识符,且是大小写敏感的。它不能与类中声明的其他标识符相同。命名规则参照day1的链接
Parameter list:参数列表,使用圆括号括起来,该参数是用来传递和接收方法的数据。参数列表是指方法的参数类型、顺序和数量。参数是可选的,也就是说,一个方法可能不包含参数。
Method body:方法主体,包含了完成任务所需的指令集。//正好day1做的练习全封装成函数了,贴出main方法中的代码。#region和#endregion是预处理指令
class Program{static void Main(string[] args){Console.WriteLine("Hello World!");#region Rectangle 三角形面积Rectangle rectangle = new Rectangle();  //创建对象rectangle.Acceotdetails();              //调用方法rectangle.Display();Console.WriteLine(rectangle.str2);      //调用函数变量#endregion#region Constant 常量Constant constant = new Constant(33, 55);Console.WriteLine("x={0},y={1}", constant.x, constant.y);Console.WriteLine("c1={0},c2={1}", Constant.c1, Constant.c2);#endregion#region Conversion转换//TypeConversion 类型转换Conversion conver = new Conversion();Console.WriteLine("类型转换后的值为{0}",conver.TypeConversion(5673.74));//ValueConversion 值转换conver.ValueConversion();#endregion#region Loop 循环Loop loop = new Loop();loop.SwitchLoop();loop.WhileLoop(10);loop.ForLoopNesting();#endregion#region Operators 运算符Operators operators = new Operators();operators.ArithmeticOperator(30,40);operators.LogicalOperator(60,13);#endregionConsole.ReadLine();}}

C#调用方法:

  1. 第一步,创建对象
  2. 第二步,调用对象,可以再定义一个变量去接收

递归方法调用:

using System;namespace CalculatorApplication
{class NumberManipulator{public int factorial(int num){/* 局部变量定义 */int result;if (num == 1){return 1;}else{result = factorial(num - 1) * num;  //递归return result;}}static void Main(string[] args){NumberManipulator n = new NumberManipulator();//调用 factorial 方法Console.WriteLine("6 的阶乘是: {0}", n.factorial(6));Console.WriteLine("7 的阶乘是: {0}", n.factorial(7));Console.WriteLine("8 的阶乘是: {0}", n.factorial(8));Console.ReadLine();}}
}

参数传递:

  • 值参数:当调用一个方法时,会为每个值参数创建一个新的存储位置。形参不会影响实参。
  • 引用参数:对变量的内存位置的引用,与提供给方法的实际参数具有相同的内存位置。
  • 输出参数 :使用 输出参数 来从函数中返回多个值。输出参数会把方法输出的数据赋给自己。
class Program{static void Main(string[] args){#region 参数传递值参数传递,即使再函数内改变了值,值也没有发生变化ParameterTransfer parameter = new ParameterTransfer();//int a = 100;//int b = 200;//Console.WriteLine("在交换之前,a 的值: {0}", a);//Console.WriteLine("在交换之前,b 的值: {0}", b);//parameter.Swap(a, b);//Console.WriteLine("在交换之后,a 的值: {0}", a);//Console.WriteLine("在交换之后,b 的值: {0}", b);//引用参数传递//int a = 100;//int b = 200;//Console.WriteLine("在交换之前,a 的值: {0}", a);//Console.WriteLine("在交换之前,b 的值: {0}", b);//parameter.SwapRef(ref a,ref b);//Console.WriteLine("在交换之后,a 的值: {0}", a);//Console.WriteLine("在交换之后,b 的值: {0}", b);//输出参数传递//int a = 100;//Console.WriteLine("在方法调用之前,a 的值: {0}", a);//parameter.getValue(out a);//Console.WriteLine("在方法调用之后,a 的值: {0}", a);//输出参数运用2:一个函数内返回多个值int a, b;parameter.getValues(out a, out b);Console.WriteLine("在方法调用之前,a 的值: {0}", a);Console.WriteLine("在方法调用之后,b 的值: {0}", b);#endregion}}class ParameterTransfer{#region 值参数传递public void Swap(int x,int y){int temp;temp = x;x = y;   //这里的x,y都是形参,形参改变不影响实参,实参就是main函数里定义的a,by = temp;}#endregion#region 引用参数传递public void SwapRef(ref int x, ref int y){int temp;temp = x;x = y;   //这里的x,y都是形参,形参改变不影响实参,实参就是main函数里定义的a,by = temp;}#endregion#region 输出参数传递public void getValue(out int x){int temp = 5;x = temp;}#endregion#region 输出参数案例2public void getValues(out int x, out int y){Console.WriteLine("请输入第一个值:");x = Convert.ToInt32(Console.ReadLine());Console.WriteLine("请输入第二个值:");y = Convert.ToInt32(Console.ReadLine());}#endregion}

ref和out关键字的区别:

  1. 都是声明引用地址的
  2. out关键字不要求调用的代码,初始化需要传递的参数值。
  • params 指定此参数采用可变数量的参数。
  • in 指定此参数由引用传递,但只由调用方法读取。
  • ref 指定此参数由引用传递,可能由调用方法读取或写入。
  • out 指定此参数由引用传递,由调用方法写入。

C#可空类型

单问号与双问号:

?单问号
//用于对 int、double、bool 等无法直接赋值为 null 的数据类型进行 null 的赋值,意思是这个数据类型是 Nullable 类型的。
int? i = 3;
//等同于:
Nullable<int> i = new Nullable<int>(3);??双问号
//判断一个变量在为 null 的时候返回一个指定的值。

Nullable类型(可空类型):可以表示其基础值类型正常范围内的值,再加上一个 null 值。赋值给数据库中的Nullable< bool >布尔型字段,可以存储值 true 或 false,或者,该字段也可以未定义。

Null合并运算符(??):如果第一个操作数的值为 null,则运算符返回双问号后面第二个操作数的值,否则返回第一个操作数的值。

class NullablesAtShow{static void Main(string[] args){#region 可空类型?int? num1 = null;int? num2 = 45;double? num3 = new double?();double? num4 = 3.1415926;bool? boolval = new bool?();Console.WriteLine("显示可空类型的值:{0},{1},{2},{3}", num1, num2, num3, num4);Console.WriteLine("显示可空类型的值:{0}", boolval);#endregion//输出结果:
//显示可空类型的值: , 45,  , 3.14157
//一个可空的布尔值:#region Null合并运算符??double? num5 = null;double? num6 = 3.14157;double num7;num7 = num5 ?? 5.34;  // num5 如果为空值则返回 5.34Console.WriteLine("num7 的值: {0}", num7);num7 = num6 ?? 5.34;Console.WriteLine("num7 的值: {0}", num7);#endregion//输出结果:
//num7 的值: 5.34
//num7 的值: 3.14157}}

C#数组

声明数组:

datatype[] arrayName;
//datatype 用于指定被存储在数组中的元素的类型。
//[ ] 指定数组的秩(维度)。秩指定数组的大小。
//arrayName 指定数组的名称。
double[] balance;

初始化数组:

//数组是一个引用类型;用new关键字创建实例
double[] balance = new double[10];

给数组赋值:

//1.索引赋值
double[] balance = new double[10];
balance[0] = 45000.01;//2.声明同时赋值
double[] balance = {2340.0,4523.69,3412.44};//3.创建并初始化
int[] marks = new int[5] {99,98,97,96,95};//4.在3的基础上省略大小
int[] marks = new int[] {99,98,97,96,95};//5.赋值一个数组变量到另一个目标数组变量中
int[] marks = new int[] {99,98,97,96,95};
int[] score = marks;

访问数组元素:

//创建对象,通过索引访问
double salary = balance[9]

案例:

class Program{static void Main(string[] args){#region 数组//int[] array = new int[10];//int i, j;//for (i = 0; i < 10; i++)//{//    array[i] = i + 100;//}//for (j = 0; j < 10; j++)//{//    Console.WriteLine("Element[{0}]={1}",j, array[j]);//}#endregion#region foreach循环数组int[] array = new int[10];int i;for (i = 0; i < 10; i++){array[i] = i + 100;}foreach(int j in array){i = j - 100;Console.WriteLine("Element[{0}]={1}", i, j);}#endregion}}

多维数组留位置:


C#字符串

创建 string 对象:

  • 通过给 string 变量指定一个字符串
  • 通过使用 string 类构造函数
  • 通过使用字符串串联运算符( + )
  • 通过检索属性或调用一个返回字符串的方法
  • 通过格式化方法来转换一个值或对象为它的字符串表示形式

案例:

class StringTest{public void StringSplicing(string fname,string lname){string fullname = fname + lname;Console.WriteLine("Full name:{0}", fullname);}public void StringConstructor(){//char是字符类型,用''单引号,本身长度固定为1字符或2字符。char[] letters = { 'H', 'e', 'l', 'l', 'o' };string greeting = new string(letters);Console.WriteLine("Greeting:{0}", greeting);}public void StringBack(){string[] sarray = { "Hello", "World" };string message = string.Join("", sarray);Console.WriteLine("Message:{0}", message);}public void StringFormat(){//public DateTime(int year, int month, int day, int hour, int minute, int second);DateTime wainting = new DateTime(2022, 11, 29, 17, 11, 30);//此处有占位符知识点:t表示短时间,d表示长日期时间string chat = string.Format("Message sent at {0:t} on {0:D}",wainting);Console.WriteLine("Message:{0}", chat);}}class Program{static void Main(string[] args){#region 字符串拼接StringTest stringtest = new StringTest();stringtest.StringSplicing("Rowan", "Atkinson");#endregion#region 字符串构造函数stringtest.StringConstructor();#endregion#region 方法返回字符串stringtest.StringBack();#endregion#region 转化值的格式化stringtest.StringFormat();#endregion}}

占位符知识点:占位符

string类的属性和方法:

class Program{static void Main(string[] args){#region 字符串#region 字符串拼接StringTest stringtest = new StringTest();stringtest.StringSplicing("Rowan", "Atkinson");#endregion#region 字符串构造函数stringtest.StringConstructor();#endregion#region 方法返回字符串stringtest.StringBack();#endregion#region 转化值的格式化stringtest.StringFormat();#endregion#region 字符串常用方法stringtest.StringMethod("helloworld", "Hello,EorlD");#endregion#region 字符串比较stringtest.StringCompare("55556", "66665");#endregion#region 字符串包含stringtest.StringContains("sssmmmm");#endregion#region 子字符串stringtest.StringItem("Last night I dreamt of San Pedro");#endregion#region 连接字符串stringtest.StringJoin();#endregion#region dateformatstringtest.StringDataFormat();#endregion#endregionConsole.ReadLine();}}class StringTest{public void StringSplicing(string fname,string lname){string fullname = fname + lname;Console.WriteLine("Full name:{0}", fullname);}public void StringConstructor(){char[] letters = { 'H', 'e', 'l', 'l', 'o' };string greeting = new string(letters);Console.WriteLine("Greeting:{0}", greeting);}public void StringBack(){string[] sarray = { "Hello", "World" };string message = string.Join("", sarray);Console.WriteLine("Message:{0}", message);}public void StringFormat(){//public DateTime(int year, int month, int day, int hour, int minute, int second);DateTime wainting = new DateTime(2022, 11, 29, 17, 11, 30);string chat = string.Format("Message sent at {0:t} on {0:D}",wainting);Console.WriteLine("Message:{0}", chat);}public void StringMethod(string test, string test2){//string test = "helloworld";//string test2 = "Hello,EorlD";Console.WriteLine(test.Length);Console.WriteLine(test.CompareTo(test2));Console.WriteLine(test.Contains(test2));Console.WriteLine(string.Concat(test,test2));//string test3 = "";Console.WriteLine(string.Copy(test2));Console.WriteLine(test.EndsWith("d"));Console.WriteLine(test.IndexOf('l'));Console.WriteLine(test.IndexOf("l",4));Console.WriteLine(test.Insert(3,"m"));Console.WriteLine(string.Join('+',test,test2));Console.WriteLine(test.Remove(3,2));Console.WriteLine(test.Replace('l','L'));string[] test3 = test2.Split(',');Console.WriteLine(test3[1]);       Console.WriteLine(test.ToUpper());}public void StringCompare(string str1,string str2){if(string.Compare(str2,str1) == 0){Console.WriteLine(str2+"and"+str1+"are equal");}else{Console.WriteLine(str2 + "and" + str1 + "are not equal");}}public void StringContains(string str){if (str.Contains('m')){Console.WriteLine("The sequence 'm' was found.");}}public void StringItem(string str){string str2 = str.Substring(22);Console.WriteLine(str2);}public void StringJoin(){string[] str1 = new string[]{"scvfbgnhmj"};string str2 = string.Join(',', str1);Console.WriteLine(str2);}public void StringDataFormat(){DateTime time = new DateTime(2022,11,30,10,36,15);//DateTime date = new DateTime();//Console.WriteLine(date.ToLocalTime());Console.WriteLine( string.Format("{0:M MM MMM MMMM}", time));}}

C# 从入门到入土(自学笔记)--Day2相关推荐

  1. 入门力扣自学笔记118 C++ (题目编号1413)

    1413. 逐步求和得到正数的最小值 题目: 给你一个整数数组 nums .你可以选定任意的 正数 startValue 作为初始值. 你需要从左到右遍历 nums 数组,并将 startValue ...

  2. 入门力扣自学笔记52 C++ (题目编号929)

    929. 独特的电子邮件地址 题目: 每个 有效电子邮件地址 都由一个 本地名 和一个 域名 组成,以 '@' 符号分隔.除小写字母之外,电子邮件地址还可以含有一个或多个 '.' 或 '+' . 例如 ...

  3. 入门力扣自学笔记150 C++ (题目编号670)

    670. 最大交换 题目: 给定一个非负整数,你至多可以交换一次数字中的任意两位.返回你能得到的最大值. 示例 1 : 输入: 2736 输出: 7236 解释: 交换数字2和数字7. 示例 2 : ...

  4. 什么是Android逆向?如何学习安卓逆向?Android逆向自学笔记入门到实战

    简单地来说,安卓逆向是对已经打包好的APP进行反编译.源码分析了解APP实现逻辑的一门技术.我们可以把安卓安装时用到的APK文件看作一个加密后的压缩包,逆向就是要最大程序地还原出APK打包之前的源码. ...

  5. Python在入门-自学笔记-8字典

    Python零基础入门自学笔记 参考教程[Python教程]<零基础入门学习Python>最新版@B站@鱼C-小甲鱼 本文记录的主要是Python中的字典. 映射关系 效率会比列表快 0. ...

  6. 《Python+Kivy(App开发)从入门到实践》自学笔记:打包——Windwos打包

    章节目录及知识点总览 6.1 Windows打包 将python程序编译成可以在windows上运行的.exe程序. 操作过程中踩过的坑: 1.书上使用的测试文件没找到(使用画板程序测试) 2.通过6 ...

  7. C语言入门 —— 非科班大一学生的C语言自学笔记

    初入前端的北京某211大一非科班生(没错上学期还是日语生)的C语言自学笔记 本文约8k字,将介绍:编程基础 数据类型 表达式 语句与控制流 函数 数组,指针 结构体等会随着学习进度推进持续更新~ 学习 ...

  8. 基于Java机器学习自学笔记(第81-87天:CNN卷积神经网络的入门到全代码编写)

    注意:本篇为50天后的Java自学笔记扩充,内容不再是基础数据结构内容而是机器学习中的各种经典算法.这部分博客更侧重于笔记以方便自己的理解,自我知识的输出明显减少,若有错误欢迎指正! 目录 1. CN ...

  9. Python自学笔记——视频课程来自小甲鱼零基础入门学习python

    Python自学笔记 细枝末节 / 浮点除 // 地板除 字符串 apitalize() 把字符串的第一个字符改为大写 casefold() 把整个字符串的所有字符改为小写 center(width) ...

  10. 【学习笔记】前端入门自学笔记(二)

    前言 本笔记是b站黑马程序员前端入门教程的听课笔记,主观性较强,初衷是与大家共同交流,一起进步. 目录 前言 表格标签 1.表格的主要作用 2.表格的基本语法 3.表头单元格标签 4.表格相关属性 5 ...

最新文章

  1. Angular 一个简单的指令实现 阻止事件扩散
  2. C++ Primer 5th笔记(6)chapter6 函数: 调试帮助
  3. LeetCode 47全排列Ⅱ48旋转图像
  4. 3DSlicer24:Module-Create Scripted
  5. 简单工厂模式(Simple Factory)
  6. 最新linux面试题
  7. 影响u盘传输速度和使用寿命的几大因素
  8. 脚本进阶,函数调用实例练习
  9. 任正非:华为鸿蒙将比安卓快 60%;小米已官方回应侵权偷图事件;博通正考虑收购软件公司,其中Tibco和赛门铁克为重点目标……...
  10. MySQL 入门(十一)—— 运算符
  11. 20212022最新Web前端经典面试试题及答案-史上最全前端面试题(含答案)、前端面试题大全、前端进阶必知必会知识点1
  12. 江苏计算机二级c语言考试内容,江苏省计算机等级考试二级C语言考试大纲_复习提纲.doc...
  13. 数据分析模型 第九章
  14. shell之数学运算
  15. Unity实现可调子屏幕(类小地图)效果
  16. matlab矩阵输出txt文件中,matlab怎么把矩阵输出到txt
  17. CentOS安装完显卡启动进不去系统
  18. 减肥盘货之忙女人减肥美食打算
  19. Delphi 10.4 Sidney / Interbase 布尔值字段Boolean数值总是false的严重BUG及解决方法
  20. 计算机系单身率排行榜,高校按专业单身率排名,IT类挤进前三,网友:选错专业孤独一生...

热门文章

  1. 矩阵分析理论在实际工程中的应用_ProNas-振动噪声工程界新一代的前沿技术
  2. 【附源码】计算机毕业设计SSM天气预报APP
  3. 子空间的交与(直)和
  4. AngularJs与EasyUI的结合使用(一)————环境的搭建
  5. 网易考拉海购Java后台开发实习-面经(已拿offer)
  6. Slicer学习笔记(三十九)slicer中Markups模块
  7. 零基础学习FFMPEG
  8. SecureRT串口调试工具COM口不够用的问题
  9. 中国消毒柜行业市场深度调研及投资策略预测报告
  10. oracle出现缺少null关键字 或者其他缺失关键字处理