繁体   English   中英

C#中的引用和对象

[英]References and objects in C#

我目前正在为学校写作。 我在如何评论应用程序的不同部分方面遇到了麻烦。

我需要从文件中读取,因此我使用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;

您正在使用名称阅读器创建 StreamReader类型的变量。 该变量实际上是通过写入创建的对象的指针(因此,引用)

new StreamReader(file, Encoding.Default);

这是描述它的正确方法吗?

StreamReader reader;

这是变量声明。

reader = new StreamReader(file, Encoding.Default);

在这里,您将使用StreamReader类的对象实例化变量“reader”。

声明变量和在C#中实例化变量之间存在差异。 当你写行

StreamReader reader;

您正在使用名称reader创建对null StreamReader对象的引用。 如果在实例化之前尝试使用它,则会得到一个空对象引用。 在进行评论时,您可以声明已声明了对象引用。

当你写下面这一行

reader = new StreamReader(file, Encoding.Default);

您正在实例化reader对象。 也就是说,您要为之前创建的对象引用赋值。 当您对此行发表评论时,您可以说您已实例化该对象。 在此之后,如果您尝试引用此对象,则不应收到NullReference异常。

如果您正在讨论内部文档,那么在声明变量时应该对变量的功能进行评论(它是为什么 - 为什么要这样做)。 这里有一些关于文档的快速提示的链接:( 下载)

如果你的任务是描述幕后发生的事情(即“玩电脑”)那么

StreamReader reader;

是宣言。 这意味着Java已将该名称保留为引用,并且它知道引用将指向内存中具有表示该类型(“类”)的数据的位置。

当你这样做

new StreamReader(file, Encoding.Default);

您实际上正在修改引用指向的容器的内容。 'new'关键字告诉Java你想获得一些内存,而NewReader()函数调用修改了那个内存,而JVM(虚拟机)维护了name / reference-> container / data关系。

当我写这个

 StreamReader reader; 

我无法定义我刚刚做的事情。 Rob Miles的C#Yellow Book定义了这个非常相似的代码

 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 ,一个booleanStreamReader或您使用classstruct定义的类型,任何求值的表达式都有一个Type
  • 类: reference type引用对象。 想象一下你的班级注册,它会引用你,有很多寄存器,但它们都引用你作为一个人。
  • 结构:引用值的value type 如果您的班级注册是按价值引用您的姓名,并且您要更改您的姓名,则该注册仍将引用旧值。
  • 实例化:创建类的实例。
  • 对象:是实例化类的结果
  • 变量:是一个type的实例,如果变量是一个value type ,那么它将始终由一个值组成,如果该变量是一个reference type ,那么它也可能是null,因为reference type可能没有引用任何东西但是,一个值类型总是有默认值...(不要被int?欺骗int?它是一个值类型!它只是转换为Nullable<int> ,但Nullable类型实际上是一个struct

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM