黑马程序员技术交流社区
标题:
枚举,结构,和构造函数到底是怎么回事啊?
[打印本页]
作者:
于振发
时间:
2013-9-29 23:12
标题:
枚举,结构,和构造函数到底是怎么回事啊?
本帖最后由 于振发 于 2013-9-30 17:39 编辑
请各位大神们,详细解析解释一下三者的区别和用法? 先谢谢啦
作者:
黄广祯
时间:
2013-9-30 00:20
枚举类型 自定义类型,属于值类型数据。一般是为了规范化代码。例如定义People类中的gender性别类型,如直接定义成string,则会可能造成性别格式赋值不规范,如有时候赋值男人,有时候可能 误赋值为男生,程序不会报错,但在判断统计时会增加难度。而枚举则解决了这种问题。----数据类型
结构struck 属于值类型。通常用来封装小型的相关变量组,如Point、Rectangle、Color等轻量对象。虽然结构的所有功能使用类都可以实现,但在大数据量下,使用结构可以节约资源。另外我们在变量传值的时候,如果希望传递对象的拷贝,而不是对象的引用,这个时候也可以使用结构。同类Class有几乎相同的语法,但受到更多的限制。
构造函数 调用类或结构首先执行的方法。只要创建类或结构,就会调用它的构造函数。类和结构可能有多少接受不同参数的构造函数。一个类如果没有实现构造函数,C#会创建一个无参构造函数,并将成员变量设置为默认值 ----方法
作者:
迷你卡卡
时间:
2013-9-30 00:47
枚举是属于自己定义的一种数据类型,定义完成之后,就像int string 一样,是一个数据类型,一般定义在命名空间下,枚举又分为普通枚举和标志枚举
例如namespace 空字符串
{
public enum Gender
{
male,
female,
}
class Program
{
static void Main(string[] args)
{
Gender ger = Gender.male;
}
}
}
这里就定义了一个普通枚举,枚举在使用时非常方便,通常通过空格就可以非常快捷的使用了
[Flags]
public enum GoodPeople
{
高=1,
富=2,
帅=4,
白=8,
美=16
}
这里定义了一个标志枚举,注意后面的数字是2的倍数一次递增
普通枚举的每个值是互斥的,但标志枚举可以相容
结构有时容易和类混淆,这两个概念也是比较相近的
类是一种“引用类型”。
创建类的对象时,对象赋值到的变量只保存对该内存的引用。
将对象引用赋给新变量时,新变量引用的是原始对象。
通过一个变量做出的更改将反映在另一个变量中,因为两者引用同一数据。
结构是一种值类型。
创建结构时,结构赋值到的变量保存该结构的实际数据。
将结构赋给新变量时,将复制该结构。
因此,新变量和原始变量包含同一数据的两个不同的副本。
对一个副本的更改不影响另一个副本。
关键就在于值类型与引用类型的区别
类通常用于对较为复杂的行为建模,或对要在创建类对象后进行修改的数据建模。
结构最适合一些小型数据结构,这些数据结构包含的数据以创建结构后不修改的数据为主。
比如我在定义一个坐标时,使用结构就会方便很多(呵呵,这个问题我也是才搞懂的)
构造函数在创建一个类时,会默认有一个无参数的构造函数,当然也可以手动添加构造函数,但是手动添加构造函数之后,原来无参数的默认构造函数就会被覆盖,构造函数也是可以实现重载的,构造函数时定义时必须和类名一致,没有返回值(void也不行),构造函数不能被子类继承,但是子类在执行自己的构造函数时会先执行以下父类的构造函数,子类的构造函数可以通过:base()来显式的调用父类的某个构造函数
作者:
Always.
时间:
2013-9-30 16:45
枚举:自己定义的一种数据类型,并且在定义类型的时候,我们要指定这个类型的所有值,枚举是为了防止同一个事物出现不同的赋值。
它的语法是:
enum 自己起的类型名称{值1,值2,值3……值n}。
结构和类:
1.结构是定义在类的上面,它和类似平级的;而构造方法是类的成员,它在类的里面
2.结构是我们自己定义的,没有定义就不会存在;而构造方法:当我们定义好一个类的时候,若是我们没有写构造方法,那么系统会自动给我加上一个默认的没有参数的构造方法,在这个构造方法中,我们什么也不做,什么也看不到。而且构造方法它是一个非常特殊的方法,它的名字和类的名字相同,并且没有返回值,此时连void都不用写。
相同点没有发现,但是我知道为什么要使用结果和构造方法:
1为什么要使用结构:
(1)当我们存储一个人的信息,就要声明一组变量(如姓名、年龄、性别),这样比较复杂。
(2)存储一个人的信息时,这几个变量间没有关系,容易混乱。
eg1.public struct Person
{
public string name;
public int age; //这里边都是结构的成员
}
在Main方法中,我们就可以通过变量名.成员名来访问结构的成员
Main方法中:
{
Person oneperson; // 申明一个变量名
Person secondperson;
oneperson.name="张三";
oneperson.age=18;
secondperson.name="李四";
secondperson.age=20;
}
2.为什么使用构造方法;
(1) 对多个属性进行赋值的时候,不需要重复的写实例名
(2)可以保证用户在new一个对象的时候,必须对某一个属性进行赋值
(3)在创建对象时,对只读属性进行初始化
eg2.
在Person类中:
public Persson(string name) // 定义一个构造方法
{
this.name=name;
}
string name;
public string Name; //name属性
{
get
{
return;
}
}
在Program中;
Person zsperson=new Person("张三");
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2