C#学习笔记——引用类型

using System;

using System.Text;

namespace ReferenceType

{

class Program

{

static void Main(string[] args)

{

//引用类型 在内存的栈上面只存储一个引用,在内存的堆上面才会存储具体的值

//object, string, dynamic他们都是别名,分别对应System.Object, System.String, System.Dynamic

//class

//C#运行分为两阶段:编译阶段、运行阶段,通常的类型检查都在编译阶段,而dynamic的类型检查在运行阶段。

Console.WriteLine("\nobject引用类型示例:" );

object o = new object();

//Object o2 = new Object();//在这里看起来不区分大小写,实际上大写的代表了System.Object,由于引用了System,所以这里省略了System.

Console.WriteLine("o的类型: " + o.GetType());//获取类型

Console.WriteLine("o转换为字符串: " + o.ToString());//转为字符串,object作为基类,这里只输出了o的类型,没有做处理

int i = 5;

Console.WriteLine("int i = 5;\ni转换为字符串: " + i.ToString());//而int等其他的类型,ToString()方法会返回变量真实的值,而不是返回类型。

Console.WriteLine("\nstring引用类型示例:" );

string s = "CrazyBun" ;

string s2 = "Crazy" ;

s2 += "Bun";

Console.WriteLine("s = " + s);

Console.WriteLine("s2= " + s2);//字符串相加

Console.WriteLine("字符串s与s2的值是否相等? " + (s == s2).ToString() + " (这里只判断值,但他们在内存中的位置是不一样的)" );

Console.WriteLine("字符串s与s2是否完全相等? " + ((object)s == ( object)s2).ToString() + " (包括引用位置)");

char c = s[2];

Console.WriteLine("s中第三个字符是: " + c);

string u = "\\\u0066\n" ;//字符串也可以存入Unicode码

//“\\”转义字符,会输出“\”,u0066为“f”的Unicode码,“\n”也是转义字符,输出回车

Console.WriteLine("转义字符和Unicode: " + u);

string at = @"E:\Visual Studio 2015\Projects\HelloWord\HelloWord\Program.cs" ;//字符串前面加上@,则字符串中的“\”就不会变成转义字符

Console.WriteLine("  at: " + at);

string noAt = "E:\\Visual Studio 2015\\Projects\\HelloWord\\HelloWord\\Program.cs" ;//如果不加上@,就需要使用转义字符

Console.WriteLine("noAt: " + noAt);

Console.WriteLine("字符串长度at: " + at.Length);

Console.WriteLine("at中是否包含\"2015\": " + at.Contains("2015"));

Console.WriteLine("\"2015\"第一次出现的位置: " + at.IndexOf("2015")); //(从0开始)

Console.WriteLine("\n字符串每次赋值的时候,都会重新分配内存空间,会很耗费资源,所以如果一个字符串需要经常操作的话要用StringBuilder" );

StringBuilder builder = new StringBuilder(); //定义一个长度不固定的字符串

builder.Append( "builder:");

builder.Append( "Crazy");

builder.Append( "Bun");

Console.WriteLine(builder);

builder.AppendFormat( "\nFormat: {0} {1} {2}", "Hello!" , "CrazyBun,", "I Love U!");//格式化String,用{0}表示后面第0个参数

Console.WriteLine(builder);

var person = new Person( "CrazyBun", 24);

Console.WriteLine("\nclass引用类型示例:" );

Console.WriteLine("Name:" + person.getName());//Alt+→获得语法提示

Console.WriteLine("Age:" + person.getAge());

Console.WriteLine("static Gender:" + Person.getGender()); //静态方法是直接通过类调用的

Console.WriteLine("静态的成员变量或方法都是存储在类上面的,而不是存储在实例化的某个变量上,所以不能通过实例化的变量调用" );

Console.WriteLine("Name属性:" + person.Name + "(默认值)");

Console.WriteLine("Age属性:" + person.Age + "(默认值)");

person.Name = "CrazyBun";

person.Age = 24; //这里调用了Age属性的set

Console.WriteLine("Name属性:" + person.Name + "(赋值后)"); //调用了Age属性的get

Console.WriteLine("Age属性:" + person.Age + "(赋值后)"); //调用了Age属性的get

Console.WriteLine("class中属性的优势是比方法更方便,安全性更灵活" );

Console.ReadLine();

}

}

class Person//定义class时如果不写访问修饰符,则默认为internal,仅在命名空间内可用

{

string name;

int age;

string gender;

/*每一个class中都有一个构造函数,如果不写够早函数,则默认为:

public Person()

{

}*/

public Person(string myName, int myAge)

{

this.name = myName;

this.age = myAge;

}

/*class内部的变量或方法,如果不写访问修饰符,则默认为private,只能在class内部访问

为了可以在Main方法中使用,所以需要设置访问修饰符为public*/

public string getName()

{

return name;

}

public int getAge()

{

return age;

}

public static string getGender() //static为静态方法或变量

{

return "男" ;

}

// 定义一个Name属性方法,与name不同

public string Name

{

//默认为public

get;//get可以使该属性被取到

set;//set可以使该属性能够被赋值

}

// 定义一个Age属性方法,与age不同

public int Age

{

//也可以在get中做一些处理,注意这里没有“;”了

get

{

return age + 10;

}

set

{

age = value - 10;//value是该属性被赋的值

}

}

}

}

执行结果

时间: 2024-10-22 17:02:42

C#学习笔记——引用类型的相关文章

JavaScript高级程序设计学习笔记--引用类型

Object类型 对象字面量表示法: var person={ name:"Nicholas", age:29, 5:true }; 这人例子会创建一个对象,包含三个属性:name,age和5.但这里的数值属性名会自动转换为字符串. 对象属性的访问:点表示法和方括号语法 alert(person["name"]); // "Nicholas" alert(person.name); // "Nicholas" 从功能上看,这两

javascript学习笔记 - 引用类型 基本包装类型

六 基本包装类型 Boolean,Number,String 这三个引用类型亦称为基本包装类型,与基本的数据类型boolean,number,string相关联.为了方便操作这些基本类型的数据. 引用类型和基本包装类型最大的区别在于对象的生存期.引用类型在代码执行流离开当前作用域之前都是一直存在的,基本包装类型只存在与代码流执行读取基本类型的值的一行代码之中.例如: var str = 'hello,world';//基本类型的数据 str.color = 'red';//创建String包装对

javascript学习笔记 - 引用类型 Object

引用类型是一种数据结构,也称作对象定义,类似于类的概念. 对象是引用类型的实例. javascript引用类型有:Object, Array, Date, RegExp, Function 使用new 关键字声明一个引用类型的实例. 一 Object 两种创建对象的方法. obj = new Object()//对象声明 obj = {}//对象字面量 对象字面量创建对象,并不会调用Object构造函数

javascript学习笔记 - 引用类型

引用类型是一种数据结构,也称作对象定义,类似于类的概念. 对象是引用类型的实例. javascript引用类型有:Object, Array, Date, RegExp, Function 使用new 关键字声明一个引用类型的实例. 一 Object 两种创建对象的方法. obj = new Object()//对象声明 obj = {}//对象字面量 对象字面量创建对象,并不会调用Object构造函数 二 Array 1.可以通过length属性删除或创建新的数组项 arr = [1,2,3]

javascript学习笔记 - 引用类型 Array

二 Array 1.可以通过length属性删除或创建新的数组项 arr = [1,2,3]; arr.length = 4;//增加 [1,2,3,undefined] arr.length = 2;//删除 [1,2]arr[6] = 6; // [1,2,3,undefined,undefined,6] 2.检测数组 Array.isArray() 3.转换方法 调用数组的toString()方法,返回由数组中每个值的字符串形式拼接而成的一个以逗号分隔的字符串.实际上,为了创建这个字符串,

javascript学习笔记 - 引用类型 RegExp

四 RegExp 格式: var expression = / pattern / flags; 1.flags 为标志.分别为g.i.m. g:表示全局模式.即模式将匹配所有的字符串,而不是在发现第一个匹配项时就立即停止. i:表示不区分大小写.  m:表示多行模式,即在到达一行文本末尾时还会继续查找下一行.   2.RegExp实例的属性 global:是否设置了g标志: ignoreCase:是否设置了i标志: lastIndex:表示开始搜索下一个匹配项的字符位置,从0算起: multi

javascript学习笔记 - 引用类型 Date

三 Date new Date() 在不传递参数的情况下,新创建的对象自动获得当前日期和时间.参数接收毫秒的timestamp Date.parse() 接收表示日期的字符串,返回相应的日期毫秒数timestamp.日期字符串的格式会因为浏览器地区设置的不同而不同.如果传入的字符串不能解析,则返回NaN Date.UTC() 接收的参数分别是年份.基于0为一月的月份.月中的日期,1-31.小时,0-23.分钟.秒.毫秒.这些参数只有年和月是必需的. 1.继承的方法 toLocalString()

javascript学习笔记 - 引用类型 Function

五 Function类型 每个函数都时Function类型的实例.函数也是对象. 声明函数: function func_name () {} //javascript解析器会在程序执行时率先读取函数声明,使其在执行任何代码之前可用(可访问) var func_name = function(){}; //解析器执行到它所在的代码行,才会被解释执行. 因此函数名是个变量,保存的是指向函数对象的指针,不会与某个函数绑定,与包含对象指针的其他变量没什么区别. 1.没有重载 声明两个同名的函数,第二个

javascript学习笔记 - 引用类型 单体内置对象

七 单体内置对象 1.Global对象 不属于任何对象的属性和方法,都归于它.全局作用域中定义的变量.函数,都属于Global对象 1.1 URI编码  encodeURI <=>decodeURI 不会编码本身属于uri的特殊字符 encodeURIComponent  <=> decodeURIComponet 将所有非标准字符进行编码 1.2 window对象 在web浏览器中,一般是将Global对象当作window对象的一部分.因此全局作用域中的变量.函数,都可以通过wi