结构与类的最大最大最大区别:
结构是值类型,类是引用类型;
结构是值类型,不能继承,但结构可以实现接口;
是定义结构还是定义类?
1、如果想使用面向对象特性,就定义成类;
2、数据存储非常大,使用类,因为结构是值类型,存储在栈上,而类是引用类型,存储在堆上。
namespace _结构
{
class Program
{
static void Main(string[] args)
{
//声明结构的时候可以new也可不new,一般建议new,不new的话得给类型赋初始值
Student stu=new Student();
stu.age=100;
stu.name="sj";
stu.Email="sj@qq.com";
stu.SayHi();
Console.WriteLine(stu.Email);
}
}
//定义一个结构,关键字struct
struce Student
{
//定义字段
public string name;
public int age;
//定义属性
public string Email
{
get;set;
}
//定义方法
public void SayHi()
{
Console.WriteLine("Hi~");
}
}
}
运行结果:
Hi~
sj@qq.com
========================================
构造函数:
与类名称具有一样名称的成员函数是构造函数。构造函数不能有返回值,甚至不能有return语句
如果一个类有构造函数,在程序中每个该类类型的对象在使用之前由此构造函数进行初始化
namespace _继承中的构造函数问题
{
class Program
{
static void Main(string[] args)
{
Student stu=new Student("sj",18,100);
Console.WriteLine(stu.Name);
Console.WriteLine(stu.Age);
Console.WriteLine(stu.Score);
Console.Readkey();
}
}
//父类
class Person
{
//无参构造函数,如果把这个注释了会报错,因为子类中会默认调用,但如果
//父类中一个构造函数都不写,也不会报错,因为默认有一个无参构造函数
//修正错误方法1:在父类中增加一个无参数的构造函数。
//这是子类的构造函数就可以找到父类中的无参构造函数。
public Person()
{
Console.WriteLine("Person类中的无参构造函数");
}
//带参构造函数
publi Person(string name,int age)
{
this.Name=naem;
this.Age=age;
}
public Person(string Name)
{
this.Name=name;
this.Age=0;
}
public string Name
{
get;set;
}
public int Age
{
get;set;
}
}
//继承的时候构造函数需要注意:
//1、继承的时候构造函数不能被继承;
//2、子类的构造函数会默认去调用父类中的无参数构造函数
//子类
class Student:Person
{
//构造函数
//修正方法2:不修改父类,而是在子类的构造函数后面通过冒号base()
//显示的去调用父类中的某个构造函数。
public Studnet(string name,int age,double score)
:base(name,age)//base的作用1:在子类中调用父类的构造函数。
{
//this.Name=naem;
//this.Age=age;
this.Score=score;
}
//属性
public double Score
{
get;set
}
}
//子类
class Teacher:Person
{
//构造函数
public Teacher(string name,int age,double salary)
:base(name)
{
//this.Name=name;
this.Age=age;
this.Salary=salary;
}
//属性
public double Salary
{
get;set;
}
}
}
=========================================
namespace _06通过this调用自己的构造函数
{
class Program
{
static void Main(string[] args)
{}
}
public class Person
{
//构造函数
publi Person(string naem,int age,string email,double salary)
{
this.Name=name;
this.Age=age;
this.Email=eamil;
this.Salary=salary;
}
//构造函数
//this作用1:在当前类的构造函数后台通过:this类调用当前类自己
//的其他构造函数。base是调用父类中的构造函数
public Person(string naem)
:tihs(name,0,null,0)//调用自己类中的构造函数,当你调用这个构造函数的时候,会先去掉用this中的构造函数
{
}
public Person(string naem,int age)
:this(name,age,null,0)
{
//this.Name=name;
//this.Age=age;
}
public Person(string naem,string email)
:this(name,0,email,null)
{
//this.Name=name;
//this.Email=email;
}
//属性
publi string Name{get;set}
publi int Age{get;set;}
publi string Email{get;set;}
publi double Salary{get;set;}
}
}