C#教程3:内置引用类型(跟我继续扯淡= =!)

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 和 白菜对于本期的建议

感谢你们

好了 碎觉~


C#教程3:内置引用类型(跟我继续扯淡= =!)

看不懂的下载附件 有注释 看变量方便