超级简单的C#问题,因为我正在尝试更好地学习语言.我来自C++背景,并且不确定没有指针的解决方案.
例如,如果我想要对变量进行单一引用,我会将其声明为
class Foo{
private:
SomeClassType* sct;
SomeOtherClass* soc;
public:
Foo(SomeClassType* xSct, SomeOtherClass* xSoc) : sct(xSct), soc(xSoc) {}
}
Run Code Online (Sandbox Code Playgroud)
所以在C#中,我必须使用我猜测静态引用或者其他动态分配方式?我不希望100%的这些漂浮在那里.我不能为我的生活似乎谷歌正确的话来弄清楚这一点.
C#中的等价物是什么?
Eri*_*ert 10
超级简单的C#问题
实际上这是一个非常深刻的问题.
我来自C++背景,并且不确定没有指针的解决方案.
C#确实有指针,但它们几乎从未使用过.
例如,如果我想要一个变量的单一引用
那里有问题.别想我需要一个变量的引用,所以我需要一个指针.是的,指针是对变量的引用的实现,但这在C#中考虑它是非常错误的.在C#中,您可以通过几种不同的方式引用变量,但几乎不需要.你在C#中做的是引用对象而不是变量.
在C#中,作为引用类型的类型的值自动引用该类型的对象.
所以:
class C
{
public int x;
}
Run Code Online (Sandbox Code Playgroud)
类型C的值是对C实例的引用 ; 这就是C#中"类"的含义.所以你可以说:
class D
{
public C c;
}
Run Code Online (Sandbox Code Playgroud)
并且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;
}
}
Run Code Online (Sandbox Code Playgroud)
实际上,对于大多数用法,它们的行为几乎相同(例外情况是指针算术,无论如何这都是无用的).访问这些实例的成员总是.在C#中使用一个点; 不->喜欢在C++中.
在某种程度上,您可以像C++引用一样对待它们,只需要重新分配它们即可.
| 归档时间: |
|
| 查看次数: |
351 次 |
| 最近记录: |