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#中,我必须使用静态引

超级简单的C#问题,因为我正在努力更好地学习这门语言。我来自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; 
}