提问人:Totally New 提问时间:4/20/2023 最后编辑:Joel CoehoornTotally New 更新时间:4/21/2023 访问量:221
C 中的新运算符返回值#
The new operator return value in C#
问:
在 C# 中,可以使用新运算符来初始化特定类型(类)的对象。例如,假设我们有一个 Person 类,以下代码从 Person 类创建一个对象实例:
Person person1 = new Person("Leopold", 6);
我的问题是:实际返回的是什么?
它是否返回:new Person("Leopold",6)
- 对 Person 对象的引用
或
- 对象本身?
答:
-1赞
Anil Kumar
4/21/2023
#1
对于您的情况,它返回指向在堆中创建的对象内存位置的引用。提供以下示例以便更好地理解。
`Box b1; //Reference variable, can not create memory //b1 is called a reference variable (not object). As of now, b1 is null
Box b2 = new Box();// object b2 of class BOX is instantiated and create memory on Heap. now b2 points box object
Box b3 = new Box(); // object b3 (new object created with new memory)
b3.length = 10;
b3.width = 20;
b1 = b3; //an object is assigned to a reference variable
//now both b1 and b3 both points to same memory location. if any one updated then another one automatically updated.`
希望对你有所帮助!
0赞
John Alexiou
#2
简短的回答是,if is a 然后返回对对象的引用。Person
class
new Persion()
您正在考虑引用与值语义是件好事。请注意,定义语义的不是关键字,而是正在初始化的数据结构。new
当 .NET Framework 开始时,两者之间有一条清晰的界限,但近年来,随着语言的新增,事情不再那么清晰了。
我将尝试在下面列出一个列表,将不同的语言结构放在值与引用语义中,并将此答案标记为 wiki 供其他人添加/编辑
价值语义 | 参考语义 |
---|---|
用户结构struct Foo { } |
用户类class Foo { } |
原始整数 , ,int long byte |
接口interface IFoo { } |
其他原语 ,char bool |
string 文字"abc" |
原始数 ,float double |
记录类型record Foo(int Age) { } |
命名常量enum |
|
文字元组 ,(1,2,3) ValueTuple<> |
元组Tuple<> |
Span<T> ,Memory<T> |
|
可为 null 的值类型等int? long? |
可为 null 的引用类型string? |
用户参考结构ref struct { } |
并不是说没有什么能阻止你使用带有
基元类型的 new 关键字,例如 x = new double();
上一个:Nim 中的每次迭代变量?
下一个:在 C 语言中将结构传递给函数
评论
Person
person1
ref
关键字,链接的文档非常清楚如何使用它