2015-11-03 1 views
3

В C# базовые типы данных, такие как bool и long, являются типами значений. Это означает, что если вы объявите переменную bool и присвоите ей значение другой переменной bool, у вас будет два отдельных значения bool в памяти. Позже, если вы измените значение исходной переменной bool, значение второй переменной bool не изменится. Эти типы копируются по значению. (Знак из profestional C# 5.0 Nagel, Christan, Глинн, Джей, Skinner, Морган), пытаясь понять это: переменные bool являются типами значений в C#

так что если мы имеем класс следующим образом:

public class Tutorial() 
{ 
    public bool param1; 
} 

, а затем в главном классе мы следующее:

Tutorial x, y; 
x = new Tutorial(); 
x.param1 = false; 
y=x; 
Console.WriteLine(y.param1); 
y.param1 = true; 
Console.WriteLine (x.param1); 

результат показывает false то true мой вопрос не должен распечатать falsefalse ?? как упоминалось в тексте, я вставляю в начало?

+0

Нет, потому что у есть х (ссылочный тип) – Steve

+0

здесь хорошее объяснение для вас @moji Http: //www.csharp-station.com/Tutorial/CSharp/Lesson02 – MethodMan

+1

'Tutorial' не является логическим, это нестандартный класс. Ваш образец кода не отражает описание. – David

ответ

4

Мой вопрос: не должен ли он печатать ложные ложные ?? как упоминалось в тексте , я вставляю в начало?

Нет, потому что оба x и y ссылочные типы, и они указывают на тот же объект. Это происходит из-за этого задания y=x;. Поэтому изменение значения для param1 с использованием x эквивалентно для этого, используя y.

«Это означает, что если вы объявляете переменную Ую и присвоить ему значение другой переменной BOOL , вы будете иметь два отдельных значение BOOL в памяти»

bool x = true; 
// We copy the value stored in x to the y 
bool y = x; 
// We change the x and the y doesn't change ! 
bool x = false; 
// We verify the above with writing to the console 
// the values of x and y 
Console.WriteLine(x); // writes false to the console 
Console.WriteLine(y); // writes true to the console. 
+0

Да, правда, я знаю, что его ссылочные типы, но что делать дальше означает: «Это означает, что если вы объявите переменную bool и присвоите ей значение другой переменной bool, вы будет иметь два отдельных значения bool в памяти "?? – moji

+1

@moji: попробуйте тот же тест, но на самом деле используйте * bool variables * вместо вашего собственного класса 'Tutorial'. – David

+0

@moji, пожалуйста, посмотрите мое обновление. – Christos

2

Если вы смотрите на

Tutorial x, y; 
y=x; 

Ваше учебное пособие по классу является ссылочным типом. Назначение

y=x; 

создает псевдоним, причем y относится к тому же экземпляру учебника, что и x. Является ли bool значением или ссылочным типом, не имеет значения, поскольку вы изменяете param1 одного и того же экземпляра учебника.

+0

Спасибо, я знаю это, но я попытался понять текст, данный этой книгой. – moji

+0

Обязательно. Рад, что вы получили его сейчас. –

0

Нет, из-за этой линии:

y=x; 

это означает, что у и х как точку на тот же объект (экземпляр Tutorial), так что поэтому любое изменение вы делаете в этом случае через год будет также отражается, когда вы ссылаетесь на экземпляр через x.

В этом случае как x, так и y являются ссылками, поскольку Tutorial, являющийся классом, является ссылочным типом.

0

Это показывает ложь, ложь:

public class Tutorial() 
{ 
    public bool param1; 
    public bool param2; 
} 

Tutorial x; 
x = new Tutorial(); 
x.param1 = false; 
x.param2=x.param1; 
Console.WriteLine(x.param1); 
x.param1 = true; 
Console.WriteLine (x.param2); 
Смежные вопросы