| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 802 人关注过本帖
标题:会c#的来,版主别删,有苦衷
只看楼主 加入收藏
独孤剑魔
Rank: 1
等 级:新手上路
帖 子:103
专家分:0
注 册:2008-8-5
收藏
 问题点数:0 回复次数:8 
会c#的来,版主别删,有苦衷
c#里根本没人回复,我觉得还是在c++板块发一次,拜托了,我根本没学c#,可是明天要考试了,有个地方问问,拜托别删,谢谢。。。。。。。。

在C#中:
public class Text
{
    struct Point
    {
         public int x;
    }
     static void main()
     {
           Point p1,p2;
           p1.x=10;
           p2=p1;//请问这是引用传递还是值传递啊???
           p1.x=20;
           Console.WriteLine("{0}{1}",p1.x,p2.x);
     }
}

我印象中c#只有string 与数组是引用类型,可是这道题,我老师给我的答案是 20,20。是不是我记错答案了,c++中是20,10,并且与前面的(c#只有string 与数组是引用类型)也想匹配。试问怎么回事,谢谢!!
搜索更多相关主题的帖子: 苦衷 版主 
2008-09-20 16:00
独孤小梦
Rank: 1
等 级:新手上路
威 望:1
帖 子:338
专家分:0
注 册:2008-6-5
收藏
得分:0 
呵呵!老兄……我不会C#,来给你顶下!

编程小菜
2008-09-20 16:07
独孤剑魔
Rank: 1
等 级:新手上路
帖 子:103
专家分:0
注 册:2008-8-5
收藏
得分:0 
呵呵,谢谢。。。
我喜欢c++,要么就喜欢java,可是java相比c++还是弱小,我们学校只教java与基于c#语言的.net平台,所以只有自学c++了。。。但是考试可不考c++啊,所以我现在头大了。。。 明天考试,怎么办啊。。。。呜呜呜。。。
2008-09-20 16:09
yupenguestc
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2008-9-20
收藏
得分:0 
这道题的答案是:20 10

c#中只有两种类型了:一种是数值类型,另外一种是引用类型
在C#中结构是数值类型,存在于堆栈中,而类是一种引用类型,存在于托管堆中的。
对于上面的程序,p1赋给p2,只是将 p1的x值赋给p2了。p1值再变化不会引起 p2值的变化。

如果将struct Point改为class Point.则答案为20 20.

注意c++和c#中的struct不同:
在c++中struct是类类型,和class很类似,唯一不同的是默认控制方式不同,struct 默认是public而class 是private.
是不是感觉c++中的struct有点重复了,其实是为了兼容c,
但是在c#做了改进,结构在C#中是值类型,可以直接使用的.他不能继承其他的类和结构,也不能作为基类,但是可以实现一个和多个接口。和类一样,也可以定义方法,属性,字段,索引和事件等等。
在c#中使用struct主要原因是为了节省开销 ,可以节省内存。

最后,你的程序有个语法错误。
static void main()的 main 应该是 Main()
2008-09-20 16:45
yupenguestc
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2008-9-20
收藏
得分:0 
其实在struct上的一些改变可以看出微软的技术是在慢慢的完善的,也是变的很合理的。
2008-09-20 16:48
yupenguestc
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2008-9-20
收藏
得分:0 
但是仅将struct变为class是不能有p1.x这样的。必须把p1,p2用构造函数构造成一个类的形式,在托管堆存在。才能使用p1.x的形式。同时还有写一个X属性,才能访问。
我将你的程序改写了,你可以换换2个关键字看出区别来。
using System;
  struct  Point
    {
          int x;
          public int X
          {
              get{return x;}
              set {x=value;}
         
    }
         
public class Text
{
   
         
    }
      static void Main()
     {
          Point p1=new Point();
          Point p2=new Point();
           
           p1.X=10;
           p2=p1;
           p1.X=20;
           Console.WriteLine("{0}{1}",p1.X,p2.X);
     }
}
当关键字是struct 的时候答案是 2010
换成class的时候答案是 2020
由于struct是值类型
所以又可以写成这样直接访问x
using System;
  struct  Point
    {
        public int x;
        
    }
         
public class Text
{
   
         
   
      static void Main()
     {
          Point p1,p2;
           
           p1.x=10;
           p2=p1;
           p1.x=20;
           Console.WriteLine("{0}{1}",p1.x,p2.x);
     }
}
2008-09-20 17:57
独孤剑魔
Rank: 1
等 级:新手上路
帖 子:103
专家分:0
注 册:2008-8-5
收藏
得分:0 
回复 6# yupenguestc 的帖子
很感谢你。。。
2008-09-20 18:15
yupenguestc
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2008-9-20
收藏
得分:0 
不客气哈,对了。我刚才将程序改成了C++  版本的。你可以看看。
#include <iostream>
using namespace std;
   struct Point
    {
     int x;

    };
    

void main()
{
    Point p1,p2;
//     Point p2=new Point();
    p1.x=10;
    p2=p1;
    p1.x=20;
    cout<<p1.x<<endl;
    cout<<p2.x<<endl;
    }

#include <iostream>
using namespace std;
class  Point
{
    int x;
  public:
    Point(int a)
    {    x=a;}
  public:int getX()
         {
             return x;
         }

};

void main()
{
     Point p1(10);
    Point p2(20);
    p2=p1;//这是引用传递
   

    cout <<"p1 anser is "<< p1.getX()<<endl;
        cout <<"p2 anser is "<<p2.getX()<<endl;
    }

他们的结果是不一样的。你可以测试下
2008-09-20 19:01
独孤剑魔
Rank: 1
等 级:新手上路
帖 子:103
专家分:0
注 册:2008-8-5
收藏
得分:0 
c++的我会,其实就是老师给的答案和我自己看得不一致,呵呵。老师的答案给错了。。。
2008-09-20 19:08
快速回复:会c#的来,版主别删,有苦衷
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012820 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved