C#来自C+的动态变量+;指针
超级简单的C#问题,因为我正在努力更好地学习这门语言。我来自C++背景,对没有指针的解决方法有点不确定。 例如,如果我想要一个对变量的引用,我会将它声明为C#来自C+的动态变量+;指针,c#,c++,C#,C++,超级简单的C#问题,因为我正在努力更好地学习这门语言。我来自C++背景,对没有指针的解决方法有点不确定。 例如,如果我想要一个对变量的引用,我会将它声明为 class Foo{ private: SomeClassType* sct; SomeOtherClass* soc; public: Foo(SomeClassType* xSct, SomeOtherClass* xSoc) : sct(xSct), soc(xSoc) {} } 所以在C#中,我必须使用静态引
class Foo{
private:
SomeClassType* sct;
SomeOtherClass* soc;
public:
Foo(SomeClassType* xSct, SomeOtherClass* xSoc) : sct(xSct), soc(xSoc) {}
}
所以在C#中,我必须使用静态引用或其他动态分配方式?我不希望100个这样的东西漂浮在那里。
我无法用谷歌搜索出正确的词语来解决这个问题
C#中的等价物是什么?C#的引用将替换您的指针:
class Foo {
SomeClassType sct;
SomeOtherClass soc;
public Foo(SomeClassType xSct, SomeOtherClass xSoc) {
// Note: No initializer list, we have to do those assignments manually
sct = xSct;
soc = xSoc;
}
}
实际上,它们在大多数用法中的作用几乎相同(指针算术除外,但在这里它是无用的)。访问这些实例的成员总是使用C#中的点
;没有<代码> -> /COD>像C++一样。
<>你可以把它们当作C++引用来对待,只是可以重新分配它们。
超简单C#问题
事实上,这是一个相当深刻的问题
<>我来自C++背景,对不带指针的解决方法有点不确定。
C#确实有指针,但它们几乎从未被使用过
例如,如果我想要一个变量的引用
问题就在那里。不要以为我需要一个变量的引用,所以我需要一个指针。是的,指针是变量引用的一种实现,但在C#中,这是非常错误的想法。在C#中,可以用几种不同的方式引用变量,但几乎不需要这样做。你在C#中所做的是引用对象,而不是变量
在C#中,属于引用类型的值自动成为对该类型对象的引用
因此:
C类型的值是对C实例的引用;这就是C#中“类”的意思。那么你可以说:
class D
{
public C c;
}
D的一个实例有一个C类型的字段,这是一个变量。变量的值是对C类型实例的引用。该实例具有int类型的变量x;该变量的值不是对任何东西的引用,它只是一个整数。但是每次创建Foo类的对象时,这两个变量不是每次都被实例化吗?我希望sct是一个指向给定内存地址的指针,而不是一个全新的正在创建的“对象”。例如,在一个构造函数中,当创建一个
Foo
实例时,两个字段是未分配的。它们是null
。您可以将新实例分配给它们(sct=new SomeClassType()
),或者重新使用从外部传入的实例,例如作为一个ctor参数:public Foo(SomeClassType sct){this.sct=sct;}
。好的,明白了,我不确定他们是否为赋值操作设置了默认操作,我想你应该从C#如何实际工作的一个非常简单的概述开始。从C++背景来看,有很多不同的东西,并且期望细微差别是相同的,这对你没有帮助。因为您刚才提到赋值运算符:在C#中它们的工作方式是不可重载和完全可预测的。对于C++的基本特性来说,编译器的魔力比C++要少得多。@乔伊:我同意你的评论,但我不确定编译器的魔法是否会减少,只是不同的编译器魔法。
class D
{
public C c;
}