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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 于振发 中级黑马   /  2013-9-26 02:00  /  2145 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 于振发 于 2013-9-26 17:08 编辑

构造函数和结构的相同点,和区别,两种适用的范围是什么勒?谢谢大家的回答

评分

参与人数 1技术分 +1 收起 理由
陈行 + 1 赞一个!

查看全部评分

8 个回复

倒序浏览
本帖最后由 段朝骞 于 2013-9-26 12:33 编辑

构造函数是类成员,结构和类是同一个级别

构造函数要和类名一致,是类在实例化时首先调用的,例如:
class People
{
    public People(){}
}
如果将构造函数声明为private,则该类不能实例化。

结构要用struct修饰
结构与类共享大多数相同的语法,但结构比类受到的限制更多:
在结构声明中,除非字段被声明为 const 或 static,否则无法初始化
结构不能声明默认构造函数(没有参数的构造函数)或析构函数,但结构可以声明带参数的构造函数。
结构在赋值时进行复制。
将结构赋值给新变量时,将复制所有数据,并且对新副本所做的任何修改不会更改原始副本的数据。
在使用值类型的集合(如 Dictionary<string, myStruct>)时,请务必记住这一点。
结构是值类型,而类是引用类型。与类不同,结构的实例化可以不使用 new 运算符。
一个结构不能从另一个结构或类继承,而且不能作为一个类的基。
所有结构都直接继承自 System.ValueType,后者继承自 System.Object。
结构可以实现接口。
结构可用作可以为 null 的类型,因而可向其赋 null 值。

结构使用时可以使用new也可以不使用,例如:

public struct Color
{
     public int x, y;  
      public Color(int p1, int p2) //结构Color的构造函数
      {
          x = p1;
          y = p2;
      }
}

Color c1 = new Color()
Color c2 = new Color(10,10)
Color c3;
c3.x=100;
c3.y=100;


评分

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

查看全部评分

回复 使用道具 举报
首先需要明确的是在C#中不叫构造函数叫做构造方法。
   先说它们的不同点:
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 收起 理由
陈行 + 1

查看全部评分

回复 使用道具 举报
在结构体与类中的构造函数大致的作用相同,但同时也存在不少的区别,而且这些区别相当重要。
一、先看类中的构造函数
类的构造函数。
  (1)当类中没有写构造函数时,实例化类的时候会默认调用父类System.Object的无参构造函数。
   (2)当类中只写了带参的构造函数时,实例化类的时候只能调用这个重载的构造函数,而继续调用无参的构造函数会提示错误。
*/
using System ;
class constructA
{
    public void output()
     {
         Console.WriteLine ("success");
     }
}
class constructB
{
    public constructB(int a)
     {
         Console.WriteLine (a);
     }
    public void output()
     {
         Console.WriteLine ("success");
     }
}
class test
{
    static void Main()
     {
         constructA cA=new constructA ();
         cA.output();
        
//         constructB cB=new constructB ();//调用错误,“constructB”方法没有采用“0”个参数的重载
//         cB.output ();
        
         constructB cB=new constructB (5);
         cB.output ();
     }
}
二、接着看结构体中的构造函数
结构体的构造函数
  (1)结构体中不能写无参的构造函数,只能写带参的构造函数,这同类的构造函数不一样。
  (2)在结构体中只有带参的构造函数时,可以调用无参的构造函数来实例化结构体,这个同类也不一样。
*
*/

using System ;
struct constructC
{
//     constructC()//结构不能包含显式的无参数构造函数,这是结构体默认的构造函数,与类不同,这个不能重写。
//     {
//         Console.WriteLine ("fail");
//     }
    public void output()
     {
         Console.WriteLine ("success");
     }
}
struct constructD
{
    public constructD(int a)//这里只可以重载结构体的带参的构造函数
     {
         Console.WriteLine (a);
     }
    public void output()
     {
         Console.WriteLine ("success");
     }
}
class test
{
    static void Main()
     {
         constructC cc=new constructC ();//调用结构体默认的构造函数
         cc.output ();
        
         constructD cd=new constructD ();//同类不一样,这种实例化的方式也是对的。
         cd.output ();
        
         constructD cd2=new constructD (5);//调用结构体带参的构造函数
     }
}
通过上面的比较,相信你已经能掌握结构体与类中的构造函数的异同了。

评分

参与人数 1技术分 +1 收起 理由
陈行 + 1 赞一个!

查看全部评分

回复 使用道具 举报
如果问题已解决。请修改下帖子为已解决哦~
回复 使用道具 举报
Always. 发表于 2013-9-26 13:25
首先需要明确的是在C#中不叫构造函数叫做构造方法。
   先说它们的不同点:
1.结构是定义在类的上面,它和 ...

首先需要明确的是在C#中不叫构造函数叫做构造方法。女侠不要闹笑话了哦,函数又称方法,方法也可以叫函数,他们是一个意思。就像可以叫你妹子又可以叫你女侠一样哦。{:soso_e100:}
回复 使用道具 举报
本帖最后由 Always. 于 2013-9-26 17:55 编辑
七里香 发表于 2013-9-26 16:16
首先需要明确的是在C#中不叫构造函数叫做构造方法。女侠不要闹笑话了哦,函数又称方法,方法也可以叫函数 ...

我晓得构造函数和构造方法是同一个意思啊,但是在C#里边,不叫构造函数,叫构造方法。不是这样么
回复 使用道具 举报
Always. 发表于 2013-9-26 17:53
我晓得他们是一个意思啊,但是在C#里边,不叫构造函数,叫构造方法。不是这样么
...

没有规定哦,可能构造方法是官方称呼,但是你说他是构造函数也不会错哦,就好像北京官方称呼为北京,我们叫他京城难道就不是北京了吗?所以别人叫他构造函数的时候你也不能说别人说错了不是?
回复 使用道具 举报
恩。那是的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马