来自c++指针的c#动态变量

本文关键字:动态 变量 c++ 指针 来自 | 更新日期: 2023-09-27 18:11:26

超级简单的c#问题,因为我想更好地学习这门语言。我来自c++背景,对没有指针的解决方案有点不确定。

例如,如果我想要一个变量的引用,我可以将其声明为

class Foo{
private:
    SomeClassType* sct;
    SomeOtherClass* soc;
public:
    Foo(SomeClassType* xSct, SomeOtherClass* xSoc) : sct(xSct), soc(xSoc) {}
}

所以在c#中,我必须使用我猜要么是静态引用,要么是其他动态分配方式?我不希望有100个这样的东西浮在外面。我无论如何也无法在谷歌上找到合适的词来解决这个问题。

在c#中等效的是什么?

来自c++指针的c#动态变量

超级简单的c#问题

其实这是一个相当深奥的问题。

我来自c++背景,我对没有指针的解决方案有点不确定。

c#确实有指针,但它们几乎从不被使用。

例如,如果我想要对变量

进行单个引用

问题就在这里。停止思考我需要一个变量的引用,所以我需要一个指针。是的,指针是对变量的引用的实现,但在c#中,这是非常错误的思考方式。在c#中,可以以几种不同的方式引用变量,但是几乎不需要。你在c#中所做的是引用对象,而不是引用变量

在c#中,如果值的类型是引用类型,则自动成为对该类型对象的引用。

:

class C 
{ 
    public int x; 
}

类型C的值是对C实例的引用;这就是c#中"类"的含义。所以你可以说:

class D 
{
    public C c; 
}

D的实例有一个类型为c的字段,这是一个变量。变量的值是对c类型实例的引用。该实例有一个int类型的变量x;该变量的值不是对任何东西的引用,它只是一个整数

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#中用点.完成;C++中没有->

在某种程度上,你可以像对待c++引用一样对待它们,只是你可以重新分配它们。