C#关于类(1)

来源:互联网 发布:生命一个数组 编辑:程序博客网 时间:2024/06/01 07:29

类的定义与使用

当类编写时与C++相似class Cat(){}

当类定义时:cat Kitty = new Cat();


属性

在Java中如果定义一个私有private成员变量,在修改该成员变量时一般会定义Set()和Get()两个函数访问器来进行修改和获取

在C#中可以用属性:假如定义了一个Cat类

class Cat

{
        private string name; //此处名字暂时不管
        private int age;
public int Age//这个变量下的属性类似于一个函数

{

get

{

return age;

}

set

{

if(value < 0) age = 0;//年龄不能为负,可以在属性中进行合法性的检查

else age = vlaue; //vlaue是一个关键字,这个关键字相当于函数的参数,值就是Age的值

}

}

在使用属性赋值时方法如下:

Cat Kitty = new Cat();

Kitty.Age = 3;

Console.writeLine("我今年{0}岁了",Kitty.Age);

属性中兼顾了封装性、合法性的检查、符合变量使用的习惯


构造函数

当定义一个类的变量时,使用Cat Kitty = new Cat(); //其中Cat()就是类函数,也就是构造函数

在创建对象时,系统先为对象的成员变量分配内存,然后通过构造函数初始化对象的成员变量

每一个类中都有一个默认的构造函数,如Cat类中的默认构造函数就是Cat(),默认的构造函数不用声明。

(默认的构造函数会把整数初始化为0,字符串初始化为空。。。)

当创建对象时,系统会调用默认的构造函数,如果你不自定义(显式地写出)构造函数,系统同样会调用默认的构造函数

自定义构造函数可以带参数,也可以不带参数

如:

class Cat

{

private string name;

private int age;

public Cat(string nameTmp, int ageTmp)//有两个参数的构造函数

{

name = nameTmp;

age = ageTmp;

}

}

定义时:

Cat Kitty = new Cat("Kitty", 3);

若自定义了有参数的构造函数,还想使用默认的无参的构造函数,则要显式地定义出来:

class Cat

{

private string name;

private int age;

public Cat()//显式地定义出无参的构造函数

{

name = "";

age = 0;

}

public Cat(string nameTmp, int ageTmp)

{

name = nameTmp;

age = ageTmp;

}

}


析构函数

不用的对象要及时删除释放内存空间,在传统的面向对象设计中用类的析构函数删除对象

~Cat()

{}

类在定义的时候会生成一个默认的析构函数,因为C#是.NET程序,有非常完善的垃圾回收机制,所以一般情况下析构函数是没必要编写的

需要手动编写析构函数的地方一般是一些不需要.NET的非托管的代码

(垃圾回收器一般何时运行具有不确定性,可以调用System.Gc.Collect()进行强制运行)


静态变量(静态字段)

当类中的一个变量在类型前加上关键字static,则该成员变量为静态变量,必须由类直接调用

class Cat

{

private static int catCount = 0;

public Cat()

{

catCount++;//每次在定义一个Cat类型时都会在原有的catCount上加一

}

~Cat()

{

catCount--;//每次销毁一个Cat类型变量都会减一,其实此处析构函数并不用编写,C#有很好的回收机制

}

}

在调用时,必须要通过类来使用,如定义6个Cat类型后调用catCount:

Cat[] cats = new Cat[6];

for(int i=0; i<cats.Length; i++)

{

cats[i] = new Cat();

}

Console.WriteLine("一共有{0}只猫",Cat.catCount;); //此处直接由Cat类调用了catCount这个变量


静态函数(静态方法)

静态函数必须由类直接调用,如Math类中的Sin()函数:

static这个关键字可以写在public和private之前或之后(如:public static void Meow() 或 static public void Meow())

double sinVlaue = Math.Sin(12);

而非静态的方法就要用对象来调用。

自定义的静态方法:

class Calculate

{

public static double Add(double x, double y){return x+y;}

public static double Sub(double x, double y){return x-y;}

}

调用的时候:

double x= 2 ;

double y = 1;

double z = Calculate.Add(x, y);


const常量

const常量在定义时就需要进行赋值,且不能修改:

class Circle

{

private const double PI = 3.1415926;//此处PI其实是隐示静态的const常量,

//完整的形式是private static const double PI = 3.1415926;只是为了方便省略了,所以此处要被类使用

private double banjing;

}

在使用时:

Circle circleOne = new Circle();

Console.WriteLine("圆周率{0}",Circle.PI); //此处由const是隐示的静态字段,所有要用类来调用

Console.WriteLine("半径{0}",circleOne.banjing); //banjing字段是显示的,要用对象来调用


readonly

只读,readonly是非静态的,其在定义时可以不赋值,可以在其他任意地方赋值,但一旦赋值就不可再更改

class Hotel

{

public readonly int roomNumber;

public Hotel(int roomNumberValue)

{

roomNumber = roomNumberValue;

}

}

readonly与const不同的地方除了赋值的地方,还有使用时的方式,const必须用类调用,如Cat.PI,而readonly要用对象调用,如:

Hotel asHome = new Hotel();  

Console.WriteLine("{0}",asHome.roomNumber);




PS:

在类中,可以用该类自身定义成员变量,如在Cat类中定义一个Cat的成员变量:

class Cat

{

private int age;

private Cat Kitty;

}

(在定义类的变量时一般都是Cat Kitty = new Cat();其实在定义其他变量时也是如此,如:int count = new int();通常为了方便不写,但是类的定义必须写)

0 0
原创粉丝点击