四.值类型和引用类型
namespace 值类型和引用类型
{
class Program
{
static void Main(string[] args)
{
//int,datetime,bool,char等都属于值类型(ValueType),占的内存很小,它的值是可以直接进行拷贝传递的
int i = 10;
int j = i;
i++;
Console.WriteLine(j);
Console.WriteLine(i);
//普通对象,函数,则是引用类型,控制的是同一片区域,赋值的时候是传递引用
Person p1 = new Person(18);
Person p2 = p1;//p2指向p1指向的对象
p1.Age++;
Console.WriteLine(p1.Age);
Console.WriteLine(p2.Age);
Console.ReadKey();
}
}
class Person
{
//属性
public int Age
{
get;//在.Framework3.0以后,就可以直接省去私有字段和get,set代码段了
set;
}
//构造方法
public Person(int age)
{
this.Age = age;
}
}
}
五.构造函数
1.作用:在创建一个对象的时候,将其初始化;
2.构造函数是用来创建对象的特殊函数,函数名和类名一样,没有返回值(没有void);
3.构造函数可以有参数,new 对象的时候传递函数参数即可;
4.构造函数可以重载,也就是有多个参数不同的构造函数;如果不指定构造函数,则类中有一个默认的无参构造函数,如果指定了构造函数,则不再有默认的无参构造函数,如果需要无参构造函数,则需要自己来写;
5.定义一个常量的方法:
六.常量与静态成员
1.全局常量: public const double pi=3.12 ;//在Math类中有这个常量,直接就能调用。
Const常量,常量名要大写,一定不会变化的值才能声明为常量。
2.全局变量:static 类变量
3.不用new就能用的方法:static方法,static方法其实就是普通函数;
4.在static方法中可以调用其他static成员,但是不能调用非static成员,在非static方法中可以调用static成员;
5.静态类,不能被new的类就是静态类。静态类一般用来实现一些函数库,***Help这样的,如SqlHelper,PageHelper等
namespace 静态类
{
class Program
{
static void Main(string[] args)
{
ConsoleHelp.SayHello();
Console.ReadKey();
}
}
//静态类不能被实例化,可直接使用,在后面要用到的SqlHelper中有很好的使用
static class ConsoleHelp
{
public static void SayHello()
{
Console.WriteLine("你好,我是静态类中的静态方法");
}
}
}
七.命名空间
1.同一文件夹下的.cs文件,命名空间可以不同,这在后面做项目的时候,要把一个类复制或移动到另一个文件夹下,一定要记得改命名空间!!!
2.如果要使用的类和当前的类不在同一个namespace,则需要添加using引用
3.自己总结:在同一个命名空间下的类(加不加public 都可以),都可以通过实例化进行使用,如果不在同一命名空间下面,则需要引用命名空间
八.索引
1.C#中提供了按照索引器进行访问的方法
2.定义索引器的方法:
//string 为索引器的类型,[]中是参数列表,进行索引器写操作就是调用set代码块,在set内部使用value得到用户设置的值,进行读操作就是执行get代码块;
3.索引器参数可以不止一个,类型也不限于Int,几乎可以是任意类型的。
String this[int index]
{
Set{}
Get{return “”;}
}
namespace 索引
{
class Program
{
static void Main(string[] args)
{
Person p1 = new Person();
p1[1] = "老大";
Console.WriteLine(p1[1]+p1[2]);
Console.WriteLine(p1["靳鹏",3,4]);
Console.ReadKey();
}
}
class Person
{
//属性和索引器都可以是只读,或者只写,或者可读可写
private string FirstName="大毛";
private string SecoundName="二毛";
//索引不至只能是int类型
public string this[string name, int x, int y]//string索引器的数据类型
{
//只读索引器
get
{
return name + x + y;
}
}
//以int类型作为索引的索引器
public string this[int index]
{
set
{
if (index == 1)
{
this.FirstName = value;
}
else if (index == 2)
{
this.SecoundName = value;
}
else
{
throw new Exception("错误的序号");
}
}
get
{
if (index == 1)
{
return this.FirstName;
}
else if (index == 2)
{
return this.SecoundName;
}
else
{
throw new Exception("没有这个");
}
}
}
}
}