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".
然而,您的 reversedName
是 char
的数组,不能按原样转换为 string
。所以以下内容不起作用:
string myString = "Hello World".ToCharArray();
因为 ToCharArray
- 顾名思义 - returns char[]
,而不是 string
并且两者之间没有转换。
这就是为什么您需要使用 constructor that accepts an array of char 创建新字符串的原因。
new
-关键字用于创建 class 的新实例。
如果你想将一种类型的一个值分配给另一种类型,你必须以某种方式转换它。
有多种方式:
- 调用接受您输入的构造函数(您这样做是因为
string
有一个接受 char[]
的构造函数)
- 使用 Cast(从
char[]
到 string
没有可用的 Cast)
- 使用转换方法(据我所知,无法将值转换为
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);
}
自从我最近才开始学习这门语言以来,在查看有关 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".
然而,您的 reversedName
是 char
的数组,不能按原样转换为 string
。所以以下内容不起作用:
string myString = "Hello World".ToCharArray();
因为 ToCharArray
- 顾名思义 - returns char[]
,而不是 string
并且两者之间没有转换。
这就是为什么您需要使用 constructor that accepts an array of char 创建新字符串的原因。
new
-关键字用于创建 class 的新实例。
如果你想将一种类型的一个值分配给另一种类型,你必须以某种方式转换它。
有多种方式:
- 调用接受您输入的构造函数(您这样做是因为
string
有一个接受char[]
的构造函数) - 使用 Cast(从
char[]
到string
没有可用的 Cast) - 使用转换方法(据我所知,无法将值转换为
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);
}