首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C#进阶者对例子里面的几个疑问?该如何解决

2012-03-01 
C#进阶者对例子里面的几个疑问?各位朋友,代码如何,下面是小弟的几个问题,请各位朋友可以耐心赐教,谢谢!!!u

C#进阶者对例子里面的几个疑问?
各位朋友,代码如何,下面是小弟的几个问题,请各位朋友可以耐心赐教,谢谢!!!

using   System;
using   System.Collections.Generic;
using   System.Text;

namespace   ConsoleApplication1
{
        class   Address
        {
                public   string   name;
                public   string   address;
        }
        class   Methodparams
        {
                public   static   void   Main()
                {
                        string   myChoice;
                        Methodparams   mp   =   new   Methodparams();
                        //。。。。。。。。
                }
                void   makeDecision(string   myChoice)
                {
                        Address   addr   =   new   Address();
                        switch   (myChoice)
                        {
                                case   "A ":
                                case   "a ":
                                        {
                                                addr.name   =   "Joe ";
                                                addr.address   =   "C#   Station ";
                                                this.addAddress(ref   addr);//问题1:这里是调用一个实例方法,是进行地址传递,里面的参数ADDR是一个什么东西,能不能详细具体一点?
                                                break;
                                        }

                        }

                }
                void   addAddress(ref   Address   addr)//问题2:REF里面的参数正常来说是这样定义的:REF   数据类型   名称,但这里面的数据类型却是一个类,为什么可以这样用?不是很明白,请讲解一下?
                {


                        Console.WriteLine( "Name:{0},Address:{1}   added. ",   addr.name,   addr.address);
                }
                void   modifyAddress(out   Address   addr)
                {
                        addr   =   new   Address();//问题3:这句其实是不是定义一个实例的,为什么可以这样写?自己认为应该是这样写的:   address   addr=new   address()
                        addr.name   =   "Joe ";
                        addr.address   =   "C#   Station ";
                }

        }

}

[解决办法]
1 ADDR应该是对象名
2 不明白 关注中
3 addr = new Address()可以这样写 原因是addr 已经 "定义 "了 但没有生成 addr = new Address() 是生成对象的意思 address addr=new address()是定义和生成写一起了
[解决办法]
关注中顶一下
[解决办法]
up
[解决办法]
void makeDecision(string myChoice)
{
Address addr = new Address(); //看清楚,lz的1、3问题都是因为忽视了这句

问题1 参数addr 就是上面的addr对象
问题2 这是定义子函数,不是调用,当然要指定类型。
定义一个方法,add(int i),难道这个int你能不写吗??
问题3 addr已经定义过了,只需重新实例化便可
[解决办法]
问题1: addr实际上是指针的指针,address是一个指向字符串的指针,addr是一个指向address的指针, addr-> address-> 字符串内容

问题2:类也是数据类型,类其实是现代程序里面最重要的数据类型

问题3: addr是在函数的参数列表里被定义过的变量呀
[解决办法]
记号
[解决办法]
学习
[解决办法]
即使是引用类型,在方法中传递的也是引用地址的副本,这一点在VB.NET中就很明显了,因为它的每个方法默认的参数都是Byval传递的。你这里在方法中用的是引用副本,虽然和方法外的引用都指向同一个对象,但改变副本的指向并不影响方法外面的引用。说白了就是所有的方法参数,如果不指定ref或者out,那就是按副本传递的。引用型传递的是地址的副本,值类型传递的是值的副本。
[解决办法]
1 对象的地址
2 表示需要一个参数 类型必须是Address 并且引用传递
3 addr = new Address()没错

建议看看最基础的编程书籍吧 先看C 再看C# 要不然会被C#一些花里胡哨的东西搞晕
[解决办法]
问题1: addr实际上是指针的指针,address是一个指向字符串的指针,addr是一个指向address的指针, addr-> address-> 字符串内容

正解,addr是一个指针
就像 C++中的 &号 取引用

问题2:类也是数据类型,类其实是现代程序里面最重要的数据类型

正解
ref 数据类型 名称
里面可以是类 结构 还有原子数据类型都可以

问题3: addr是在函数的参数列表里被定义过的变量呀

out Address addr
表示带出数据类型
addr已经定义
所以可以这样定义

[解决办法]
另外
一定要注意基础的学习
否则 空中楼阁
[解决办法]
this.addAddress(ref addr);//问题1:这里是调用一个实例方法,是进行地址传递,里面的参数ADDR是一个什么东西,能不能详细具体一点?
addr是指向托管堆里对象的引用

void addAddress(ref Address addr)//问题2:REF里面的参数正常来说是这样定义的:REF 数据类型 名称,但这里面的数据类型却是一个类,为什么可以这样用?不是很明白,请讲解一下?

类就是一种数据类型,就是因为简单的数据类型不能表达我们对客观世界的描述,所以我们才需要类(其实就是自定义的复杂数据类型)



void modifyAddress(out Address addr)
{
addr = new Address();//问题3:这句其实是不是定义一个实例的,为什么可以这样写?自己认为应该是这样写的: address addr=new address()
//这个addr就是void modifyAddress(out Address addr)里传进来的这个输出参数的addr,如果你自己再写个address addr=new address(),那么就是一个新的addr,并不能改变传进来的addr所指向的对象的内容了,再说输出参数本来就应该在方法的内部赋值
addr.name = "Joe ";
addr.address = "C# Station ";
}

[解决办法]
其实lz好好的看看值类型和实例化类的问题,就明白这样写是可以的了
[解决办法]
同意
LifeForCode(用生命编程.再入轮回(2007)) ( ) 信誉:100 2007-08-17 11:15:42 得分: 0


void makeDecision(string myChoice)
{
Address addr = new Address(); //看清楚,lz的1、3问题都是因为忽视了这句

问题1 参数addr 就是上面的addr对象
问题2 这是定义子函数,不是调用,当然要指定类型。
定义一个方法,add(int i),难道这个int你能不写吗??
问题3 addr已经定义过了,只需重新实例化便可



[解决办法]
原来这就叫进阶了……
[解决办法]
呵呵,看到了大家从不同层次和角度给lz的解释
lz估计晕菜了,3年后再看这贴都有收获

热点排行