我目前正在为学校写作业。我在如何评论应用程序的不同部分方面遇到了麻烦。
我需要读取文件,因此我使用StreamReader类。
当我写这个
StreamReader reader;
我无法定义我刚刚做的事情。 Rob Miles的C#Yellow Book定义了这个非常相似的代码
Account RobsAccount;
当程序服从该行时,您实际获得的是创建引用 叫做RobsAccount。
他跟随行李标签的比喻
你可以认为它们有点像行李标签,因为它们可以绑在一起 用一根绳子的东西。如果你有标签,那么你可以按照绳索来 与之相关的对象。
当Rob Miles稍后写这篇文章时
RobsAccount = new Account();
他将其描述为
(...)创建类的实例,然后连接我们的标签 它。
RobsAccount = new Account();
类似于我的情况,我只是写
reader = new StreamReader(file, Encoding.Default);
在阅读了几本关于C#的不同书籍后,我仍然无法自信地评论所谓的内容。他们似乎使用不同的名称和不同的类比。
所以我的问题是:
对此
的评价是什么?StreamReader reader;
对此
的评论是什么reader = new StreamReader(file, Encoding.Default);
我的编程老师说你写的时候
StreamReader reader;
您正在使用名称 reader 创建 StreamReader 类型的变量。该变量实际上是通过编写
创建的对象的指针(因此,引用)new StreamReader(file, Encoding.Default);
这是描述它的正确方法吗?
答案 0 :(得分:3)
StreamReader reader;
这是变量声明。
reader = new StreamReader(file, Encoding.Default);
在这里,您要实例化变量" reader"与StreamReader类的对象。
答案 1 :(得分:1)
声明变量和在C#中实例化变量之间存在差异。当你写行
StreamReader reader;
您正在使用名称reader创建对null StreamReader对象的引用。如果在实例化之前尝试使用它,则会得到一个空对象引用。当您发表评论时,您可以声明您已声明了对象引用。
当您写下以下行
时reader = new StreamReader(file, Encoding.Default);
您正在实例化reader
对象。也就是说,您要为之前创建的对象引用赋值。当您对此行发表评论时,您可以说您已实例化该对象。在此之后,如果您尝试引用此对象,则不应收到NullReference异常。
答案 2 :(得分:0)
如果您正在讨论内部文档,那么您在声明变量时应该对变量的功能进行评论(它是为什么 - 为什么要这样做)。 以下是有关文档的一些快速提示的链接:(download)
如果您的任务是描述幕后发生的事情(即“播放电脑”),那么
StreamReader reader;
是一份声明。这意味着Java已将该名称保留为引用,并且它知道该引用将指向内存中具有表示该类型(“类”)的数据的位置。
当你这样做时
new StreamReader(file, Encoding.Default);
您实际上正在修改引用所指向的容器的内容。 'new'关键字告诉Java你想获得一些内存,而NewReader()函数调用修改了那个内存,而JVM(虚拟机)维护了name / reference->容器/数据关系。
答案 3 :(得分:0)
当我写这个
StreamReader reader;
我无法定义我刚刚做的事情。 C# Rob Miles的黄皮书定义了这个非常相似的代码
Account RobsAccount;
当Rob Miles稍后写这篇文章时
RobsAccount = new Account();
他将其描述为(...)创建类的实例,然后将我们的标记连接到它。
所以让我们打破这个......
// The code below is instantiating a new object.
// new Account();
// The code below is declaring a variable, at the moment it is null
// This is because it isn't referencing any objects that we've created.
Account RobsAccount;
// The `=` character is an assignment operator, and we'll need it to
// assign objects that we create to variables.
// The code below will assign an object of type Account, to the variable
// RobsAccount which has a type of Account.
RobsAccount = new Account();
// Now the `RobsAccount` variable is pointing to the object
// that we just instantiated
继续你的最后一个问题......
对此
的评价是什么?StreamReader reader;
对此
的评论是什么reader = new StreamReader(file, Encoding.Default);
// A declaration of a StreamReader variable.
StreamReader reader;
// Assigning a the `reader` variable with a new StreamReader object
// that has been instantiated with the following parameters
// - The file path of the document to read
// - The encoding of the file to read
reader = new StreamReader(file, Encoding.Default);
关键字:
Type
,可能是string
,integer
,boolean
,StreamReader
或类型您使用class
或struct
进行了定义,任何评估为值的表达式都有Type
。reference type
引用一个对象。想象一下你的班级注册,它会引用你,有很多寄存器,但它们都引用你作为一个人。value type
。如果您的班级注册是按价值引用您的姓名,并且您要更改您的姓名,则该注册仍将引用旧值。type
的实例,如果变量是value type
,那么它将始终由一个值组成,如果变量是reference type
,那么它可能是也是null,因为reference type
可能根本没有引用任何东西,但是,值类型将始终具有默认值...(不要被int?
欺骗它是值类型!它只需翻译为Nullable<int>
,但Nullable
类型实际上是struct