1.构造函数
(1)概念:构造函数是一个特殊的方法,它通常在类的成员最前面,主要用于在创建实例时对对象进行初始化。
(2)构造函数的定义:
①构造函数名通常与类名相同;
②构造函数没有返回值;
③一般情况下,构造函数总是public类型的。
注:我们在编写类时,有的时候我们忘记了在类中添加一个构造函数,是不是在该类中就没有构造函数了呢?答案是否定的。在C#中,每个类都有构造函数,即使我们没有声明它,编译器也会自动的为我们提供一个默认的无参构造函数,如在上一节中,类中就没有添加构造函数,我们还能对Animal类实例化,这就是编译器提供给我们的默认的无参构造所起的作用。我们还要注意的是,在构造函数中不要对类的示例作初始化以外的事情,不要尝试显式的调用构造函数,也就是不能直接调用。
(3)构造函数的使用:
构造函数不能被直接调用,必须通过new关键字在创建对象时才会自动调用,一般方法在程序执行到它的时候被调用。
接着上节“C#面向对象的程序设计”的内容,下面我们用代码来解释以上内容:
①定义无参构造函数
语法:
public 类名
{
}
代码:
public Animal
{
}
②定义有参构造函数
语法:
public 类名(参数列表)
{
//用参数列表中的变量给类的成员变量赋值
}
代码:
public Animal(string name,string color)
{
this._name = name;
this._color = color;
}
在如上的代码中,我们涉及到了this关键字,在此,我们来粗略的解释下this关键字。this 关键字代表的是当前对象,在类的内部,我们可以用this关键字访问对象的内部成员。如this._name中,我们用this关键字调用Animal对象的成员_name。
2.重载
(1)概念:在以个类中,参数列表不一致的几个同名方法。
注意:仅仅返回值不同不能构成方法的重载。下面举个例子来区分哪个为方法的重载:
public int Result()
{
//方法体
}
与
public string Result()
{
//方法体
}
不形成方法的重载;
public int Result()
{
//方法体
}
与
public int Result(string 参数名,int 参数名)
{
//方法体
}
形成方法的重载
public int Result()
{
//方法体
}
与
public string Result(string 参数名1,int 参数名2)
{
//方法体
}
形成方法的重载
(2)重载有构造函数的重载,也有方法的重载。构造函数的重载其实和方法的重载没什么太大的区别,无非访问修饰符为public ,没用返回值类型,在此就不在举例子解释了,等会我们将会在编写的控制台小程序中展现出来。
4.静态方法和实例方法的区别
静态方法 |
实例方法 |
static 关键字 |
不需要static关键字 |
类名调用 |
实例对象调用 |
可以访问静态成员 |
可以直接访问静态成员 |
不可以直接访问实例成员 |
可以直接访问实例成员 |
不能直接调用实例方法 |
可以直接调用实例方法和静态方法 |
调用前初始化 |
实例化对象时初始化 |
下面,我们编写个控制台小程序:
在类中的代码:
namespace AnimalDemo
{
class Animal
{
#region 构造函数重载
public Animal()
{
}
public Animal(string name, string color)
{
this._name = name;
this._color = color;
}
public Animal(string name, string color, int speed)
{
this._name = name;
this._color = color;
this._speed = speed;
}
#endregion
#region 字段与属性
//名称
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
//颜色
private string _color;
public string Color
{
get { return _color; }
set { _color = value; }
}
//奔跑速度
private int _speed;
public int Speed
{
get { return _speed; }
set { _speed = value; }
}
#endregion
#region 方法重载
public void Run()
{
Console.WriteLine("一只"+this._color+"的"+this._name+"正在以"+this._speed+"km/h的速度在奔跑\n");
}
public void Run(int speed)
{
Console.WriteLine("一只" + this._color + "的" + this._name + "正在以" + speed + "km/h的速度在奔跑\n");
}
#endregion
}
}
在Main()方法中的代码:
namespace AnimalDemo
{
class Program
{
static void Main(string[] args)
{
//方法一
Animal animal1 = new Animal();
animal1.Name = "兔子";
animal1.Color = "白色";
animal1.Speed = 20;
animal1.Run();
//方法二
Animal animal2 = new Animal("兔子","白色");
animal2.Run(20);
//方法三
Animal animal3 = new Animal("兔子","白色",20);
animal3.Run();
Console.ReadLine();
}
}
}