构造函数
定义:对对象的初始化操作进行封装得到的方法
构造函数是一个特殊的函数:
1、不能写返回值(void也不能写);
2、构造函数的名称必须与类名一致;
3、新建类中,会默认有一个无参的构造函数。如果自己新添加了一个构造函数,那么那个默认无参的构造函数会消失
创建对象时会调用构造函数,创建对象使用new关键字
Person person = new Person();
new关键字:
使用new关键字的目的:创建对象
使用过程:
1、在内存中开辟空间;2、在开辟的空间中,创建对象;3、调用对象的构造函数初始化
在创建构造函数时,可以创建多个构造函数。而通过this关键字可以使参数少的构造函数显示调用参数多的构造函数。
this关键字:
使用this关键字的目的:代表当前类的对象
好处:1、显示地调用本类的构造函数,减少大量的初始化的冗余代码
2、代表当前类的对象
namespace 构造函数
{
internal class Program
{
static void Main(string[] args)
{
Student student = new Student(13,"张三");
}
}
public class Student
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public char Gender { get; set; }
public int Math { get; set; }
public Student(int id, string name, int age, char gender, int math)
{
this.Id = id;
this.Name = name;
this.Age = age;
this.Gender = gender;
this.Math = math;
}
public Student(int id ,string name):this(id,name,0,'1',0)//使用this关键字来调用本类构造函数,避免了初始化id,name的代码。程序运行时,会先执行this构造函数里的代码,在执行本构造函数里的代码
{
}
}
}
初始化对象的三种方式:
1、依次地给对象的每个属性赋值
namespace 构造函数
{
internal class Program
{
static void Main(string[] args)
{
Student student = new Student();
student.Name = "张三";
student.Id = 1;
student.Age = 30;
student.Gender = '男';
student.Math = 80;
}
}
public class Student
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public char Gender { get; set; }
public int Math { get; set; }
}
}
2、构造函数
3、对象初始化器
static void Main(string[] args)
{
Student student = new Student() { Id = 1, Name = "张三", Age = 30, Gender = '男', Math = 100 };
}
静态与非静态
1、被static标记的成员,称之为静态成员
2、没有被static标记的成员,称之为实例(对象)成员或者非静态成员
3、实例成员属于对象,在类的外部,通过对象名去调用,在类的内部,通过this关键字调用
4、静态成员属于类,不管在外部还是内部,都需要类名进行调用。如果调用者和被调用者在同一个类中,可以省略类名
5、静态成员在类的内部可以直接调用,不需要传参数。类直接调用的,一定是静态成员;对象直接调用的,一定是实例成员。静态成员的优点在于调用简单,无需创建对象,可以直接通过类名调用
6、静态成员在项目中,一般都作为工具类使用
7、静态成员具有全局共享的特点,存储在静态存储区域,在整个的程序运行中,都不会被资源释放。所以静态成员始终消耗内存资源
8、普通(实例)类中,可以包含静态成员;静态类中,不能包含实例成员。静态先于实例出现在内存中
9、静态类是不允许创建对象的。因为静态类时拿类去调用的,创不创建对象没有意义(因为实例成员需要拿对象去调用,所以实例成员用到时要创建对象)
命名空间
1、命名空间相当于类的文件夹,是项目的名称
2、解决项目的重名问题
3、跨项目访问:1、添加对要访问项目的引用 2、导入命名空间 3、将要跨项目访问的类的访问修饰符,修改为public