BGM:fripSide (フリップサイド) - only my railgun (这节课略啰嗦 = =! 不懂下方留言或者直接Q我 )
还是新建一个控制台程序
老规矩 先放代码
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace referenceType { class Program { static void Main(string[] args) { object a = new object(); string s = "F_picacho是腹黑攻"; string s1 = "F_picacho"; s1 += "是腹黑攻"; char c = s[5]; Console.WriteLine(a.GetType()); Console.WriteLine(a.ToString()); Console.WriteLine(sb.ToString()); Console.WriteLine(s); Console.WriteLine(s1); Console.WriteLine( s == s1 ); Console.WriteLine((object)s== (object)s1); StringBuilder sb = new StringBuilder(s1); ceshi.Append("说真的"); ceshi.Append("冻梨真的很受"); Console.WriteLine(sb); Console.WriteLine(c); Console.Read(); } } }
铺垫:
C# 的内置引用类型
object string dynamic
object = System.Object
dynamic = System.DynamicObject
C#程序在执行中分为两个阶段,一个是编译阶段 第二个是运行阶段。
通常的类型检查都是在编译阶段(静态类型检查),而dynamic规定强制在运行阶段检查,对于dynamic先不进行重点讲解(不是我懒= =!)https://www.cnblogs.com/Helius/archive/2016/08/21/5792997.html
C#中所有的数据类型的基类都是object 那所有的类型都有ToString()这个方法 每个类的ToString的效果都不同
(注:大概就是说。。。派生类可以override基类的ToString()方法吧!= =)
先讲讲object
object a = new object(); //声明一个object 当然也可以大写new Object(两者等价),这个是using的问题啦,以后再说,聪明的可能能够反应过来是怎么回事= =! Console.WriteLine(a.GetType()); //a.GetType();//获得元类型(注:具体在反射一课) Console.WriteLine(a.ToString()); //a.ToString();//转换成字符串
然后编译测试发现输出的是两个System.Object
他返回了object的这个类型
在默认中他不会进行任何处理所以返回了这个类型
那我们添加一个
int i = 100; Console.WriteLine(i.GetType()) 然后他输出了100 这个i在object进行了一定的处理 然后返回了他的真实的值 而不是类型 (是在System.Integer32.ToString中做的处理,而不是System.Object.ToString())
我们再来看看 string
string s = "F_picacho是腹黑攻"; //声明方法很简单 <string><变量名><内容>
这个在C#中很重要
也可以这么使用
string s = "F_picacho是腹黑攻"; string s1 = "F_picacho"; s1 += "是腹黑攻"; //进行一个加等
然后输出 发现结果都是F_picacho是腹黑攻
并且使用了
Console.WriteLine( s == s1 ); //输出True 真的 在C#中 == 是判断两边是否相等。
Console.WriteLine((object)s== (object)s1);//这里字符串进行了一个强制转换成为object,那在判断的时候调用是object这个的运算符 也就是说字符串的判断和object不一样 False(假的)
还有StringBuilder 很常用
StringBuilder sb = new StringBuilder(s1); //在C#程序中 大量的处理会很消耗C#的执行力 用这个可以完美解决 sb.Append("说真的"); sb.Append("冻梨真的很受"); Console.WriteLine(sb); // 表面上感觉是跟; Console.WriteLine(s1+"说真的"+"冻梨真的很受");是一样的 但是在计算机里的开销是完全不同的 那在输出S1的时候是分配了两次的内存空间 而StringBuilder会优化string //AC_682会用for(循环语句 并且引用计时器 为大家展示一下 区别到底有多大 这里不进行演示了) //(注:我不会owo)
string还有很多用法啦 不一一演示 大家自行摸索吧 string.~
本期教程资源 https://yunpan.cn/cMwtADbb5uHme (提取码:8acc)
感谢我的老搭档AC_682继续的丰富教程资源
感谢来自于BeeStudio的张志 和 小陈菌对于本期的帮助
感谢来自于Zendee的Next_atmosphere 和 白菜对于本期的建议
感谢你们
好了 碎觉~
看不懂的下载附件 有注释 看变量方便