C#中的符号'new',有什么用?

The symbol 'new' in C#, what is its use?

自从我最近才开始学习这门语言以来,在查看有关 C# 的一些教程时遇到了一个问题。我遇到了一个问题,一旦我反转了一个字符串,我就不得不使用新字符串来将它的实际值存储在不同的变量中。

为什么需要使用 'new string()'?在不同的编程语言中,我从未遇到过使用 'new string()' 的需要。提前致谢:)

//C#

char[] reversedName = name.ToCharArray();
Array.Reverse(reversedName); 
string result = new string(reversedName);

String 与任何面向对象编程语言中的其他 classes 一样是 class,我们可以使用 new 关键字创建它的对象,就像我们为创建任何类型的对象。

在您上面的特定场景中,您有一个 char 数组,并且 String class 有一个构造函数重载,它将 char[] 作为输入并创建一个 String.因此,您使用 new String.

调用构造函数

所以发生的事情是你说使用 char[] 创建一个字符串类型的对象,它在它的构造函数中提供。

你可以 - 就像你提到的任何其他语言一样 - 当然也可以使用这样的东西:

string m = "Hello World". 

然而,您的 reversedNamechar 的数组,不能按原样转换为 string。所以以下内容不起作用:

string myString = "Hello World".ToCharArray();

因为 ToCharArray - 顾名思义 - returns char[],而不是 string 并且两者之间没有转换。

这就是为什么您需要使用 constructor that accepts an array of char 创建新字符串的原因。

new-关键字用于创建 class 的新实例。

如果你想将一种类型的一个值分配给另一种类型,你必须以某种方式转换它。

有多种方式:

  1. 调用接受您输入的构造函数(您这样做是因为 string 有一个接受 char[] 的构造函数)
  2. 使用 Cast(从 char[]string 没有可用的 Cast)
  3. 使用转换方法(据我所知,无法将值转换为 string

这里是一个示例-class,它实现了显式和隐式转换(System.String 没有):

class MyString
{
    private string stringValues;

    // Constructors
    public MyString(char[] charArray) { stringValues = new string(charArray); }
    public MyString(string str) { stringValues = str; }
    public MyString() { }

    // ToString for writing to console
    public override string ToString() { return stringValues; }

    // Operator to concat "MyStrings"
    public static MyString operator +(MyString a, MyString b) { return new MyString(a.ToString() + a.ToString()); }

    // Implicit Cast-operator string to MyString
    public static implicit operator MyString(string str) { return new MyString(str); }

    // Explicit Cast-operator char-array to MyString
    public static explicit operator MyString(char[] str) { return new MyString(str); }
}

internal static void Main(string[] args)
{
    MyString tmp = new MyString("Initialize by constructor with parameter string");
    Console.WriteLine(tmp);

    tmp = new MyString("Initialize by constructor with parameter char-array".ToCharArray());
    Console.WriteLine(tmp);

    tmp = new MyString("x") + new MyString("+") + new MyString("y");
    Console.WriteLine("Use of '+ operator'" + tmp);

    tmp = "Initialize by creating string and using implicit cast for strings";
    Console.WriteLine(tmp);

    tmp = (MyString)("Initialize by creating char-array and using explicit cast for strings".ToCharArray());
    Console.WriteLine(tmp);
}