рд▓реЗрдХрд┐рди рджреВрд╕рд░реА рдУрд░, рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣рд▓ рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╡рд╣рди рдХрд░рддрд╛ рд╣реИред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░рджрд░реНрд╢рди рдФрд░ рдореЗрдореЛрд░реА рджреЛрдиреЛрдВ рдХреЛ рд╣рд┐рдЯ рдХрд░рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓ рдПрдХ рдкреНрд░рддрд┐ рд╣реИ, рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рдХрд┐рд╕реА рднреА рд╕рд░рдгреА рдХреЛ рдмрдбрд╝реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реАрдк рдореЗрдВ рдЧрд┐рд░рдиреЗ рдХреА рд▓рдЧрднрдЧ рдЧрд╛рд░рдВрдЯреА рд╣реИ, рдЬреЛ рджреЛрдиреЛрдВ рдкреНрд░рджрд░реНрд╢рди (рдЬреАрд╕реА рдореЗрдВ рдмрдврд╝реЗ рд╣реБрдП рд╕рдордп рдХреЗ рдХрд╛рд░рдг) рдФрд░ рдореЗрдореЛрд░реА (рдЦрдВрдбрд┐рдд рд╣реАрдк рдмрд╣реБрдд рдЦрд░рд╛рдм) рд╣реИред
рджреВрд╕рд░реЗ, рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рднрд░рд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
class Program
{
static void Main( string [] args)
{
Foo[] f = new [] { new Foo {Field = 5}};
for ( int i = 0; i < f.Length; i++)
{
Foo foo = f[i];
foo.Field = 10;
Console .WriteLine(foo.Field);
}
Console .WriteLine(f[0].Field);
}
}
struct Foo
{
public int Field;
}
* This source code was highlighted with Source Code Highlighter .
рд╕реНрдХреНрд░реАрди, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдЧреА,
10 5
рд▓реЗрдХрд┐рди рдпрд╣ рддрдереНрдп рдХрд┐ рдпрд╣ "рдкрд╛рдареНрдпрдХреНрд░рдо" рдХреЛрдб рдХреЗ рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рдЕрдзреНрдпрдпрди рдХреЗ рдмрд╛рдж рд╣реА рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдФрд░, рдХреЗрд╡рд▓ рдЖрдИрдбреАрдИ рдХреЗ рд╕рд╛рде - рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдлреВ рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рджрд░реНрд╢рдХ рдореЗрдВ рдПрдХ рд╕рдВрд░рдЪрдирд╛ рд╣реИ рд▓рдЧрднрдЧ рдЕрд╕рдВрднрд╡ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЕрдЧрд░ рдлреВ рдХрд┐рд╕реА рдЕрдиреНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред .NET рдбреЗрд╡рд▓рдкрд░реНрд╕ рд▓рд┐рдВрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдЖрджреА рд╣реИрдВ (рдЬреЛ, рд╕рдВрдпреЛрдЧрд╡рд╢, рд░рд┐рд╕реНрдкреЗрдкрд░ рдореЗрдВ рдмрдЧ рджреНрд╡рд╛рд░рд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд░рддрд┐рдзреНрд╡рдирд┐рдд рд╣реЛрддрд╛ рд╣реИ - рд╡рд╣ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реИ рдХрд┐ 'рдлреЙрд░' рд╕рд╛рдЗрдХрд▓ рд╡рд┐рдж 'рдлреЙрд░рдЪреЗрдХ', рдЬреЛ рдХрд┐ рдирд┐рдХрд▓рддрд╛ рд╣реИ, рдЕрд╕рдВрднрд╡ рд╣реИ)ред
рдФрд░ рддреАрд╕рд░рд╛, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, "рд╕реБрд░рдХреНрд╖рд╛" рдХреА рднрд╛рд╡рдирд╛ рднреНрд░рд╛рдордХ рд╣реИред рдЗрди рд╕рдВрд░рдЪрдирд╛рдУрдВ рдореЗрдВ рдЕрдХреНрд╕рд░ рдРрд░реЗ рдкрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ (рднрд▓реЗ рд╣реА рд╕рдВрд░рдЪрдирд╛рдПрдВ рд╣реЛрдВ), рдЬреЛ рдЗрди "рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп" рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ "рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп" рдирд╣реАрдВ рдмрдирд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
class Program
{
static void Main( string [] args)
{
Foo f = new Foo
{
Field = 5,
Bars = new []
{
new Bar {Name = "My Name" }
}
};
BadFunction(f);
Console .WriteLine(f.Bars[0].Name);
}
private static void BadFunction(Foo foo)
{
foo.Field = 10;
foo.Bars[0] = new Bar {Name = "Other Name" };
}
}
struct Foo
{
public int Field;
public Bar[] Bars;
}
struct Bar
{
public string Name;
}
* This source code was highlighted with Source Code Highlighter .
рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдмрд╛рдж, рдЖрдк "рдЕрдиреНрдп рдирд╛рдо" рджреЗрдЦреЗрдВрдЧреЗ, рдЬреЛ рдмрд┐рд▓реНрдХреБрд▓ рддрд╛рд░реНрдХрд┐рдХ рд╣реИ рдФрд░ рдпрд╣ рднреА рд╕реНрдкрд╖реНрдЯ рд╣реЛрдЧрд╛ рдХрд┐ рдлреВ рдХреЛрдИ рд╕рдВрд░рдЪрдирд╛ рдирд╣реАрдВ рдереА, рдмрд▓реНрдХрд┐ рдПрдХ рд╡рд░реНрдЧ рдерд╛ред рд▓реЗрдХрд┐рди рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдбреЗрд╡рд▓рдкрд░ рдХреЗрд╡рд▓ рд╕рд░рдгреА рдореЗрдВ рдореВрд▓реНрдп рдХреЛ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдФрд░ рдЫрджреНрдо-рдЕрджреГрд╢реНрдп рдЬрд╛рд▓ рдореЗрдВ рдирд╣реАрдВ рдЧрд┐рд░рд╛, рдлрд┐рд░ рд╕реЗ, рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реИред
рдирд┐рд╖реНрдХрд░реНрд╖ рд╕реНрд╡рдпрдВ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддреЗ рд╣реИрдВ (рдмреЗрд╢рдХ, рдХрд┐рд╕реА рдиреЗ рд╕рд╛рдорд╛рдиреНрдп рдЬреНрдЮрд╛рди рдФрд░ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЛрдВ рдХреЛ рд░рджреНрдж рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ):
- рдХреЗрд╡рд▓ рдЙрди рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдЬрд╣рд╛рдВ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдФрд░ рдЙрдЪрд┐рдд рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП P / Invoke)ред
- рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд░рдгрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ - рдЪрд░рдо рдорд╛рдорд▓реЛрдВ рдореЗрдВ IEnumerable <T> рдпрд╛, IList <T> рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ (рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ ReadOnlyCollection <T> рдХреЗ рд░реВрдк рдореЗрдВ)ред
- рдпрджрд┐ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЙрдиреНрд╣реЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдмрдирд╛рдПрдВред