All Rights Reserved.
39
C# LANGUAGE REFERENCE
verbatim-string-literal-characters:
verbatim-string-literal-character
verbatim-string-literal-characters verbatim-string-literal-character
verbatim-string-literal-character:
single-verbatim-string-literal-character
quote-escape-sequence
single-verbatim-string-literal-character:
any character except "
quote-escape-sequence:
""
The example
string a = "hello, world";
// hello, world
string b = @"hello, world";
// hello, world
string c = "hello \t world";
// hello
world
string d = @"hello \t world";
// hello \t world
string e = "Joe said \"Hello\" to me";
// Joe said "Hello"
string f = @"Joe said ""Hello"" to me";
// Joe said "Hello"
string g = "\\\\sever\\share\\file.txt";
// \\server\share\file.txt
string h = @"\\server\share\file.txt";
// \\server\share\file.txt
string i = "one\ntwo\nthree";
string j = @"one
two
three";
shows a variety of string literals. The last string literal, j, is a verbatim string literal that spans multiple lines.
The characters between the quotation marks, including white space such as newline characters, are duplicated verbatim.
2.5.3.6 The null literal
null-literal:
null
2.5.4 Operators and punctuators
operator-or-punctuator: one of
{
}
[
]
(
)
.
,
:
;
+
-
*
/
%
&
|
^
!
~
=
<
>
?
++
--
&&
||
<<
>>
==
!=
<=
>=
+=
-=
*=
/=
%=
&=
|=
^=
<<=
>>=
->
40
Copyright Microsoft Corporation 1999-2000. All Rights Reserved.
Chapter 3 Basic concepts
3. Basic concepts
3.1 Declarations
Declarations in a C# program define the constituent elements of the program. C# programs are organized using namespaces (§9), which can contain type declarations and nested namespace declarations. Type declarations (§9.5) are used to define classes (§10), structs (§11), interfaces (§13), enums (§14), and delegates (§15). The kinds of members permitted in a type declaration depends on the form of the type declaration. For instance, class declarations can contain declarations for instance constructors (§10.10), destructors (§10.11), static constructors (§10.12), constants (§10.3), fields (§10.4), methods (§10.5), properties (§10.6), events (§10.7), indexers (§10.8), operators (§10.9), and nested types.
A declaration defines a name in the declaration space to which the declaration belongs. Except for overloaded constructor, method, indexer, and operator names, it is an error to have two or more declarations that introduce members with the same name in a declaration space. It is never possible for a declaration space to contain different kinds of members with the same name. For example, a declaration space can never contain a field and a method by the same name.
There are several different types of declaration spaces, as described in the following.
• Within all source files of a program, namespace-member-declaration s with no enclosing namespace-declaration are members of a single combined declaration space called the global declaration space.
• Within all source files of a program, namespace-member-declaration s within namespace-declaration s that have the same fully qualified namespace name are members of a single combined declaration space.
• Each class, struct, or interface declaration creates a new declaration space. Names are introduced into this declaration space through class-member-declaration s, struct-member-declaration s, or interface-member-declaration s. Except for overloaded constructor declarations and static constructor declarations, a class or struct member declaration cannot introduce a member by the same name as the class or struct. A class, struct, or interface permits the declaration of overloaded methods and indexers. A class or struct furthermore permits the declaration of overloaded constructors and operators. For instance, a class, struct, or interface may contain multiple method declarations with the same name, provided these method declarations differ in their signature (§3.4). Note that base classes do not contribute to the declaration space of a class, and base interfaces do not contribute to the declaration space of an interface. Thus, a derived class or interface is allowed to declare a member with the same name as an inherited member. Such a member is said to hide the inherited member.
• Each enumeration declaration creates a new declaration space. Names are introduced into this declaration space through enum-member-declarations.