相关疑难解决方法(0)

C#中的值类型和引用类型有什么区别?

我知道一些差异,

  1. 值类型存储在堆栈中,其中引用类型存储在托管堆上.
  2. 值类型变量直接包含它们的值,其中引用变量仅包含对在托管堆上创建的对象的位置的引用.

我错过了还有其他的区别......如果是的话,他们是什么?

c# types reference

9
推荐指数
2
解决办法
2万
查看次数

什么是价值等级,什么是C#中的参考类?

a value classreference classC#的定义是什么?

这与a value typereference type?有什么不同?

我问这个问题是因为我在MCTS Self-Paced Training Kit(考试70-536)中读到了这个问题.第1章,第1课,课程回顾4:

您需要创建一个仅包含值类型的简单类或结构.您必须创建类或结构,以使其尽可能高效地运行.您必须能够将类或结构传递给过程,而无需担心过程将对其进行修改.您应该创建以下哪项?

参考类

B参考结构

C值类

D值结构

正确答案:D

不正确:你可以创建一个引用类; 但是,它可以在传递给程序时进行修改.

B不正确:您无法创建参考结构.

C不正确:您可以创建一个值类; 但是,结构往往更有效率.

D正确:价值结构通常是最有效的.

.net c# oop terminology

6
推荐指数
1
解决办法
4580
查看次数

C#隐式更新传递给方法的参数,没有返回类型,也没有out或ref用法

这对我来说非常时髦,显然开发人员应该使用关键字out但我不相信这甚至可以工作:

public BusinessResponse<MyResultType> MyMethod(){

    BusinessResponse<MyResultType> res = new BusinessResponse<MyResultType>();
    ProcessResult(res);

    return res; //this has the values set by ProcessResult!!! How?
}

private void ProcessResult(BusinessResponse<MyResultType> result)
{
    result.State = BusinessResponseState.Success;
    //set some other stuff in the result argument
}
Run Code Online (Sandbox Code Playgroud)

我的同事说这被称为"深度参考",我不敢相信这在C#中起作用.我会重构使用outaka private void ProcessResult(out BusinessResponse<MyResultType> result)但我仍然想知道为什么这段代码有效.

UPDATE

所以看起来我不正确,这段代码很好.似乎情绪是,作为C#开发人员,我应该立即知道,因为传递给processResult的参数是堆上的引用类型,通过值传入引用本身的副本,并且复制的引用仍然指向同一个对象.

c#

5
推荐指数
1
解决办法
1686
查看次数

参考和值类型方案

我一直在努力彻底了解参考和价值类型.就在我以为自己拥有它的时候,我遇到了这个场景......

我创建了一个包含单个对象的类.

class Container
{
    public object A {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

当我创建此Container类的实例(a)时,我正在创建引用类型的实例.我为类中的对象分配了一个整数.据我所知,这将被装箱作为对象,另一种参考类型.

int start = 1;  
Container a = new Container{ A=start };
Run Code Online (Sandbox Code Playgroud)

我创建了Container类的另一个实例(b),但是为它分配了第一个容器的值,b的值现在是对a的引用.

Container b = a;
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,当我打印出aA和bA的值时,它们是相同的.

Console.WriteLine("a.A={0},b.A={1}",a.A,b.A);
//a.A=1,b.A=1
Run Code Online (Sandbox Code Playgroud)

并且,正如预期的那样,当我更改aA的值时,bA的值也会因为它们引用相同的对象而发生变化.

a.A = 2;

Console.WriteLine("a.A={0},b.A={1}",a.A,b.A);
// a.A=2,b.A=2
Run Code Online (Sandbox Code Playgroud)

现在我决定尝试使用单个本地对象.再次,我将整数打包到第一个对象中,并将第一个对象的值分配给第二个对象.我认为此时的对象应该是引用类型,因此c和d应该引用相同的对象.不改变任何东西,它们返回相同的值.

int start = 1;
object c = start;
object d = c;

Console.WriteLine("c={0},d={1}",c,d);
// c=1,d=1
Run Code Online (Sandbox Code Playgroud)

像以前一样,在更改初始对象的值时,我希望两个对象的值相同.

c = 2;

Console.WriteLine("c={0},d={1}",c,d);
// c=2,d=1
Run Code Online (Sandbox Code Playgroud)

当我打印这两个对象的结果时,d的值不像以前那样改变.

有人可以解释为什么这个场景中的作业与之前的作业有所不同吗?

谢谢

.net c# value-type reference-type

4
推荐指数
1
解决办法
855
查看次数

标签 统计

c# ×4

.net ×2

oop ×1

reference ×1

reference-type ×1

terminology ×1

types ×1

value-type ×1