记得上次黑马的吕老师视频面试时问我“说说类和结构体的区别?”我当时想到的是“类是引用类型,结构体是值类型呗!”,就没往下说了,吕老师又问“结构体里面有构造函数吗?”,我懵了,因为很少使用结构体。今天抽空学习整理了一下,希望对论坛里面不了解的同学有所帮助!
namespace test12
{
class ClassA
{
public void output()
{
Console.WriteLine("success");
}
}
class ClassB
{
public ClassB(int a)
{
Console.WriteLine(a);
}
public void output()
{
Console.WriteLine("success");
}
}
struct StructA
{
//StructA() //错误,结构不能包含显式的无参数构造函数,这是结构体默认的构造函数,与类不同,这个不能重写。
//{
// Console.WriteLine("success");
//}
public void output()
{
Console.WriteLine("success");
}
}
struct StructB
{
public StructB(int a)
{
Console.WriteLine(a);
}
public void output()
{
Console.WriteLine("success");
}
}
class Program
{
static void Main(string[] args)
{
ClassA A = new ClassA();
A.output();
//ClassB B = new ClassB();//错误,ClassB没有0个参数的构造函数
//B.output();
ClassB B = new ClassB(5);
B.output();
StructA SA = new StructA(); //调用结构体默认的构造函数
SA.output();
StructB SB = new StructB();//同类不一样,这种实例化的方式也是对的。
SB.output();
StructB SC = new StructB(5);//调用结构体带参的构造函数
SC.output();
Console.ReadKey();
/*
类的构造函数。
(1)当类中没有写构造函数时,实例化类的时候会默认调用父类System.Object的无参构造函数。
(2)当类中只写了带参的构造函数时,实例化类的时候只能调用这个重载的构造函数,而继续调用无参的构造函数会提示错误。
结构体的构造函数
(1)结构体中不能写无参的构造函数,只能写带参的构造函数,这同类的构造函数不一样。
(2)在结构体中只有带参的构造函数时,可以调用无参的构造函数来实例化结构体,这个同类也不一样。
如何选择结构还是类
(1)堆栈的空间有限,对于大量的逻辑的对象,创建类要比创建结构好一些
(2)结构表示如点、矩形和颜色这样的轻量对象,例如,如果声明一个含有1000个点对象的数组,则将为引用每个对象分配附加的内存。 在此情况下,结构的成本较低。
(3)在表现抽象和多级别的对象层次时,类是最好的选择
(4)大多数情况下该类型只是一些数据时,结构时最佳的选择
* */
}
}
}
|