Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 变量和对象之间的区别_C#_.net - Fatal编程技术网

C# 变量和对象之间的区别

C# 变量和对象之间的区别,c#,.net,C#,.net,在我学习C#net的教程中,有两种说法反复出现 DataRow-dr 这意味着什么。我假设它是DataRowclass的一个变量 DataRow dr=newdatarow() 这意味着什么。我假设它是DataRow类的对象 但我还是带着一个模棱两可的想法离开了,在这种情况下,我必须使用第一个案例或第二个案例。我现在很困惑 我假设这个问题已经在Java论坛上重复过了。但是我没有得到它,因为我没有任何Java背景。在标记之前,请重复考虑这个问题。< /P> < p>创建变量有2个部分,声明和赋值<

在我学习C#net的教程中,有两种说法反复出现

DataRow-dr

这意味着什么。我假设它是
DataRow
class的一个变量

DataRow dr=newdatarow()

这意味着什么。我假设它是
DataRow
类的对象

但我还是带着一个模棱两可的想法离开了,在这种情况下,我必须使用第一个案例或第二个案例。我现在很困惑


我假设这个问题已经在Java论坛上重复过了。但是我没有得到它,因为我没有任何Java背景。在标记之前,请重复考虑这个问题。< /P> < p>创建变量有2个部分,<强>声明<强>和<强>赋值< /强> < /p> 在声明部分,您声明变量存在并声明其类型:

DataRow dr; // Create's a variable of type DataRow with a value of null.
赋值接受一个值并将变量指向该值:

dr = new DataRow(); // Creates a new DataRow and points dr variable to it.
您可以在同一行中执行这两项操作,如下所示:

DataRow dr = new DataRow();
结果与您将它们分成上面的两行一样,变量的类型在两种情况下都是
DataRow

但是,变量中的
对象可以是继承类型:

class MyDataRow : DataRow
{
}

DataRow dr = new MyDataRow(); //Creates a new object of type MyDataRow and points dr to it.
托管的
对象
必须由变量保存,否则将被保存

正在创建DataRow类型的变量,但该变量将为null

DataRow dr = new DataRow(); 
正在创建一个变量并为其分配一个新值,在本例中,该值是数据行的一个实例。

在C中,数据行永远不能被实例化。它始终可以用作

DataTable dt=新的DataTable(); DataRow dr=dt.NewRow()

上面的语句为表创建一个新行

   DataRow dr=dt.Rows[0];
上述语句从datatable中获取第一行

编译时,将永远不会执行下面的语句

  DataRow dr=new DataRow();

这个basiclay告诉dr是一个“类型”DataRow的变量。它不创建DataRow对象本身

**DataRow dr = new DataRow();**
这实际上创建了对象并将其存储到“dr”变量中

你可以这样写

DataRow dr;
dr = new DataRow();
注意,在第二行,我已经知道“dr”是DataRow类型的

如果要调用Datarow的任何函数,那么首先必须创建它的实例。实例是使用“new”关键字创建的。

C#中的变量与大多数其他语言中的变量一样,是存储内容的地方。把它们想象成一种特殊形状的抽屉,你可以只放一件东西。适合这样一个抽屉的东西是价值观

C#基本上有两种基本类型的值:“值类型”值和对象引用。(让我们暂时忽略“指针”。)

“值类型”是C#定义为
结构
枚举
的任何类型,包括基本类型,如
int
bool
char
double
。这些值直接存储在变量中,如果以任何方式使用该变量,该值将复制到使用它的位置(例如,分配给新变量,或作为参数传递给某个方法或运算符)


C#中所有不是值类型的类型都是“引用类型”,其中包括数组、字符串和大多数其他类。引用类型的实例不存储在变量中,而是驻留在称为“heap”的特殊内存区域中。当您“将对象分配给变量”时,实际上您只将对该对象的引用放入变量中。当访问变量时,C#跟随引用以允许访问对象的成员。换句话说,引用类型的“值”只是对对象的引用。因此,当您将变量的内容传递给某个运算符或方法或将其分配给某个其他变量时,您只复制引用,而不复制引用后面的对象。

Java与您的问题有什么关系?Java中也有同样的问题。因此,在任何一个标记重复之前,我宁愿让他们发出警告。好吧,答案将与Java相同…什么时候更喜欢哪一个?用户偏好我认为编译器最终会得到相同的结果。。。我想..数据行博士;除非通过执行new DataRow()创建它的实例,否则将不执行任何操作。你需要学习c#中“对象/类”的概念,以获得完整的概念。但在这种情况下,我必须使用哪一个?你总是声明,当你需要分配时,就这样做。在我看来,如果你能在一行中完成,那么可读性会更好可以独立运行。这很可能会被优化掉,如果不是,它将被GCed。是的,编译后我收到了它。
**DataRow dr = new DataRow();**
DataRow dr;
dr = new DataRow();