相关疑难解决方法(0)

在C#中,为什么String是一个行为类似值的引用类型?

String是一种引用类型,即使它具有值类型的大多数特性,例如是不可变的并且具有==重载以比较文本而不是确保它们引用相同的对象.

为什么字符串不是一个值类型呢?

c# string clr value-type reference-type

348
推荐指数
8
解决办法
16万
查看次数

存储对象的引用

有点奇怪的问题,但我想知道有人可以帮忙......

在C++中,我可以做这样的事情

class MyOtherClass
{
     private:
         MyLogger* logger;
     public:
         MyOtherClass (MyLogger* logger)
              : logger (logger)
         {}
};

class MyClass
{
     private:
         MyLogger* logger;
     public:
         MyClass (MyLogger* logger)
              : logger (logger)
         {}
};

int main (int c, char** args)
{
    MyLogger* logger = new MyLogger ();
    /* Code to set up logger */
    MyOtherClass* myOtherClass = new MyOtherClass (logger);
    MyClass* myClass = new MyClass (logger);
}
Run Code Online (Sandbox Code Playgroud)

因此,每个其他对象(myOtherClass和myClass)都将包含一个指向logger的指针,因此它们将调用相同的logger类.但是,我如何在C#中实现同样的目标?有没有办法存储一个引用或指向全局对象的指针 - 我猜测在C#中我是否有类似的东西

public class MyClass
{
     private MyLogger logger = null;

     public MyClass (MyLogger …
Run Code Online (Sandbox Code Playgroud)

c# c++

9
推荐指数
1
解决办法
3万
查看次数

在.NET中,字符串初始化为null的基本原理是什么?

我理解String是一个对象,而不是Int,除非你创建对象,否则对象变量通常不指向任何东西.所以我知道它是如何工作的.

但是,就简单实用的编程而言,为什么.NET不将字符串初始化为空(""),因为这肯定是字符串变量的最常见用法 - 作为字符串,而不是作为对象?

我从来没有(还)需要一个字符串为null,即"不是字符串".这似乎是一种罕见的要求.我不能说int变量是null,那么为什么用string呢?毫无疑问,将它作为一个选项是必要的,但是为什么.NET开始时为null,当int等给出正确的初始值时?

我问,因为我不仅想了解某些事情是如何运作的,而是为什么,因为它减少了我对它看起来多么奇怪的咆哮的渴望.:)

.net string initialization

5
推荐指数
2
解决办法
133
查看次数

为什么只有字符串是不可变的而不是其他数据类型

我总是想知道什么时候涉及到可变性。为什么 .net 设计者只开发了 stringbuilder 类来实现 string 类的可变性,而不是 intbuilder for int 考虑到 int 和 string 的实现方式完全相同,而不管它们的数据类型如何。

c# vb.net

5
推荐指数
1
解决办法
1186
查看次数

在.Net中的struct String会有好处吗?

注意:这是一个假设的讨论.我实际上并不想实现struct String.

.Net String类可以是值类型(结构),因为它是不可变的并且具有很少的成员.但String不是值类型.可能是因为String是在引入可空类型之前设计的,或者可能是为了匹配Java字符串的行为.

将String更改为值类型或实现String的值类型变体是否有益?它将删除一个间接级别并匹配常见的非可空案例.

.net string value-type reference-type

4
推荐指数
1
解决办法
754
查看次数

标签 统计

c# ×3

string ×3

.net ×2

reference-type ×2

value-type ×2

c++ ×1

clr ×1

initialization ×1

vb.net ×1