我对字符串类有疑问。 System.String
是类类型,但为什么我们可以使用它而不使用New
关键字对其进行实例化?
例如:
Dim CommandLineParameters As String = Microsoft.VisualBasic.Interaction.Command
根本没有使用新关键字
答案 0 :(得分:3)
写作时
Dim s As String = "hello"
您只是指定一个参考。在幕后,编译器生成代码以实例化保存"hello"
的字符串对象。该实例化很可能在作业发布之前很久就已经发生了,但其全部细节是另一个故事。
总之,上面的代码不会实例化对象。
同样,在你的例子中:
Dim CommandLineParameters As String = Microsoft.VisualBasic.Interaction.Command
没有对象被实例化。所有这一切都是复制对现有对象的引用。
答案 1 :(得分:1)
如果没有实例化,你就无法真正使用它(下面有一些注意事项)。你可以:
A)将string
引用复制到另一个string
引用
或
B)将string
添加到Nothing
值。添加此项是为了简化字符串的使用。例如,请参阅C#: Why is adding null to a string legal?,但对于VB.NET应该是相同的。
BUT
C)在VB.NET中,与C#有很大的不同:“内部”VB.NET函数认为Nothing
等同于“”。所以Len(Nothing) = 0
和UCase(Nothing) = ""
。 string
类的方法如果在Nothing
(来自String Manipulation和Nothing = String.Empty (Why are these equal?))上使用,仍会引发异常
我将添加字符串文字(例如"Foo"
)在加载定义它们的程序集期间预先构建。所以,如果你这样做
Dim aString As String = "A String"
您正在做的是将包含"A String"
的字符串对象的引用复制到aString
。
答案 2 :(得分:1)
是的,编译器有一些快捷方式,可以让你在没有明确创建字符串的情况下使用字符串。
当您使用文字字符串时,它甚至在您使用时都不会创建,而是在应用程序启动时创建所有文字字符串,因此您只复制已存在字符串的引用。
您的示例类似,您没有创建新字符串,只是复制已存在的字符串的引用。
答案 3 :(得分:-1)
你可以。
char[] chars = { 'w', 'o', 'r', 'd' };
string string1 = new string(chars);
另外
string my string = "test";
实例化为具有值“test”的新字符串
您所说的是访问静态类型成员,例如String.Format
或String.Join
。