A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 于振发 于 2013-9-30 17:39 编辑

        请各位大神们,详细解析解释一下三者的区别和用法?  先谢谢啦

评分

参与人数 1技术分 +1 收起 理由
haxyek + 1

查看全部评分

3 个回复

倒序浏览
枚举类型     自定义类型,属于值类型数据。一般是为了规范化代码。例如定义People类中的gender性别类型,如直接定义成string,则会可能造成性别格式赋值不规范,如有时候赋值男人,有时候可能 误赋值为男生,程序不会报错,但在判断统计时会增加难度。而枚举则解决了这种问题。----数据类型

结构struck  属于值类型。通常用来封装小型的相关变量组,如Point、Rectangle、Color等轻量对象。虽然结构的所有功能使用类都可以实现,但在大数据量下,使用结构可以节约资源。另外我们在变量传值的时候,如果希望传递对象的拷贝,而不是对象的引用,这个时候也可以使用结构。同类Class有几乎相同的语法,但受到更多的限制。

构造函数    调用类或结构首先执行的方法。只要创建类或结构,就会调用它的构造函数。类和结构可能有多少接受不同参数的构造函数。一个类如果没有实现构造函数,C#会创建一个无参构造函数,并将成员变量设置为默认值     ----方法

评分

参与人数 1技术分 +1 收起 理由
haxyek + 1

查看全部评分

回复 使用道具 举报
枚举是属于自己定义的一种数据类型,定义完成之后,就像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()来显式的调用父类的某个构造函数

评分

参与人数 1技术分 +1 收起 理由
haxyek + 1

查看全部评分

回复 使用道具 举报
枚举:自己定义的一种数据类型,并且在定义类型的时候,我们要指定这个类型的所有值,枚举是为了防止同一个事物出现不同的赋值。
它的语法是:
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("张三");

评分

参与人数 1技术分 +1 收起 理由
haxyek + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马