6 / 6 / 3
Регистрация: 22.06.2010
Сообщений: 320
1

Имеет ли значение, с большой или маленькой буквы писать "String"

04.02.2011, 00:29. Показов 8709. Ответов 33
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
есть след метод:
C#
1
public override string ToString()
В чем разница, если бы string было с большой буквы?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.02.2011, 00:29
Ответы с готовыми решениями:

Есть код который считает слова с большой буквы, надо чтобы считало только с маленькой буквы
private: System::Void button1_Click(System::Object^sender,System::EventArgs^e) { int kol = 0; ...

Почему результат компиляции маленькой программы на с++ имеет довольно большой размер?
Почему 20 строчек программа после компиляции exe файл занимает пол метра 512 кб?) так много

С большой буквы топ2, с маленькой - отсутствует в выдаче (
Главное, что в топе он один с такой проблемой - в остальном всё идентично

Разная выдача с Большой и маленькой буквы после 25
Разная выдача с большой и маленькой буквы после 25.07. Подскажите сталкивался ли кто раньше с этой...

33
4337 / 1506 / 101
Регистрация: 12.04.2009
Сообщений: 2,342
04.02.2011, 00:47 2
Ни в чем
1
6 / 6 / 3
Регистрация: 22.06.2010
Сообщений: 320
04.02.2011, 01:12  [ТС] 3
ясно, thanks)))
0
154 / 31 / 11
Регистрация: 29.10.2012
Сообщений: 397
12.07.2014, 22:06 4
А у меня всё-таки вопрос есть по этому поводу. Мы знаем, что в C# есть разичные типы: int, bool, char. Мы так же знаем, что классы - это тоже типы, в которых могут находится поля опять же всяких разичных типов, функций и конструкторов. Но класс - это ссылочный тип, в то время как не класс - не ссылочный тип. Мы знаем, что ссылочные типы - это типы, при которых, некоторые объекты имеют свойство ссылаться на одно значение. Т.е. при следующем коде...
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
static void Main(string[] args)
        {
            List<int> myFirstList = new List<int>();
 
            for (int i = 0; i < 1; i++)
            {
                myFirstList.Add(1);
            }
 
            List<int> mySecondList = myFirstList;
 
            for (int i = 0; i < 1; i++)
            {
                Console.WriteLine("First: {0} \t Second:{1}", myFirstList[i], mySecondList[i]);
            }
 
            myFirstList[0] = 9;
 
            for (int i = 0; i < 1; i++)
            {
                Console.WriteLine("First: {0} \t Second:{1}", myFirstList[i], mySecondList[i]);
            }
 
            Console.ReadLine();
        }
...мы получаем результат при котором изменение значения одной переменной изменяет значение другой. Ответ будет (9, 9).
Нам также известно, что String - это тоже класс, а значит он является ссылочным типом. Тогда почему такой код...
C#
1
2
3
4
5
6
7
8
9
static void Main(string[] args)
        {
            string temp = "string1";
            String first = new String(temp.ToCharArray());
            String second = first;
            second = "string2";
            Console.WriteLine("First string: {0}, Second string: {1}", first, second);
            Console.ReadLine();
        }
...не вызывает аналогчный результат? Значение первого string остаётся неизменным.

Добавлено через 5 минут
И второй вопрос: почему, если надо создать переменную какого-либо класса, то нужно прописывать:
C#
1
... = new ...
...в то время как, при создании переменной типа, скажем int, можно просто напросто обойтись вот таким кодом:
C#
1
int number = 5;
0
Эксперт .NET
5531 / 4296 / 1216
Регистрация: 12.10.2013
Сообщений: 12,329
Записей в блоге: 2
12.07.2014, 22:27 5
Цитата Сообщение от Pro100Tom Посмотреть сообщение
Значение первого string остаётся неизменным.
Потому что строки неизменяемы. Недавно обсуждалось.

Добавлено через 1 минуту
Цитата Сообщение от Pro100Tom Посмотреть сообщение
если надо создать переменную какого-либо класса, то нужно прописывать:
Чтобы вызвать конструктор, естественно.
1
154 / 31 / 11
Регистрация: 29.10.2012
Сообщений: 397
12.07.2014, 22:28 6
Так String - это строка или класс? string - знаю, строка.
0
370 / 351 / 193
Регистрация: 31.03.2013
Сообщений: 2,586
12.07.2014, 22:30 7
Pro100Tom,
Цитата Сообщение от Pro100Tom Посмотреть сообщение
в то время как, при создании переменной типа, скажем int, можно просто напросто обойтись вот таким кодом:
Ну если это численный тип, то он явно не ссылочный, и мы указываем его явно, ссылочными в C# являются классы и строковые типы.
Цитата Сообщение от Pro100Tom Посмотреть сообщение
И второй вопрос: почему, если надо создать переменную какого-либо класса, то нужно прописывать:
Вы сами ответили на свой вопрос, при создании объекта, вы указываете ключевое слово new, тем самым создаете экземпляра этого класса.
Цитата Сообщение от Pro100Tom Посмотреть сообщение
не вызывает аналогчный результат? Значение первого string остаётся неизменным.
В этом случае, Вам нужно понять, каким образом расположены данные на "куче" и каким образом они работают с ссылочными типами, и тогда Вы сами сможете ответить на свой вопрос.
0
Эксперт .NET
5531 / 4296 / 1216
Регистрация: 12.10.2013
Сообщений: 12,329
Записей в блоге: 2
12.07.2014, 22:31 8
Цитата Сообщение от Pro100Tom Посмотреть сообщение
можно просто напросто обойтись вот таким кодом:
Можете написать и через ....new... Будет то же самое.
0
8940 / 4852 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
12.07.2014, 22:32 9
string это алиас для класса System.String. Так же как int для System.Int32 и т.п.
Цитата Сообщение от Pro100Tom Посмотреть сообщение
Значение первого string остаётся неизменным.
Это особенность строк. Присваиванием ты создаёшь новую строку
C#
1
2
String second = first;//Создаётся новая строка. В неё записывается содержимое строки, на которую ссылается переменная first
second = "string2";//Опять создаётся новая строка и записывается туда, куда ссылается переменная
2
Эксперт .NET
5531 / 4296 / 1216
Регистрация: 12.10.2013
Сообщений: 12,329
Записей в блоге: 2
12.07.2014, 22:37 10
Цитата Сообщение от Pro100Tom Посмотреть сообщение
Так String - это строка или класс?
Класс. System.String.
http://msdn.microsoft.com/ru-r... .110).aspx

Добавлено через 3 минуты
Pro100Tom, как верно было сказано, все эти int, string, bool и т.п. - просто алиасы.
Вместо них вы можете писать System.String, System.Int32, System.Boolean... От этого ничего не поменяется.
0
154 / 31 / 11
Регистрация: 29.10.2012
Сообщений: 397
12.07.2014, 22:39 11
Цитата Сообщение от Midian Посмотреть сообщение
Вам нужно понять, каким образом расположены данные на "куче"
Я знаю каким образом расположены данные на куче: есть определённое место в памяти, которое резервируется программой. Адресс остаётся неизменным вплоть до того, как коллектор уничтожает объекты. И поэтому представляю картину:
C#
1
2
3
string temp = "string1";
            String first = new String(temp.ToCharArray());
            String second = first;
Вот тут из кучи резервируем место в памяти и кладём туда значение. После этого создаем второй экземпляр класса, у которого адрес должен совпадать с адресом первой перменной типа String. Но при проверке, он не совпадает, потому что изменение одного значения не изменяет другого. Так объясните мне пожалуйста, как же работает куча тогда?
0
370 / 351 / 193
Регистрация: 31.03.2013
Сообщений: 2,586
12.07.2014, 22:44 12
Pro100Tom, Вы ошибаетесь, адрес никак не будет совпадать, выделится новый участок памяти в куче с ссылкой на первый экземпляр, произойдет обвертка, а в переменную second запишется адрес в куче на переменную first ,в итоге получим ответ: srting1. Что в принципе логично.
0
154 / 31 / 11
Регистрация: 29.10.2012
Сообщений: 397
12.07.2014, 22:45 13
Так, стоп. Я запутался. Строки неизменяемы, но оказывается, что строка это алиас класса. Получается, что классы System.Int32, System.String тоже неизменяемы?
0
370 / 351 / 193
Регистрация: 31.03.2013
Сообщений: 2,586
12.07.2014, 22:46 14
Поменяв первую строку, поменяются и остальные, и это логично.
0
154 / 31 / 11
Регистрация: 29.10.2012
Сообщений: 397
12.07.2014, 22:48 15
Цитата Сообщение от Midian Посмотреть сообщение
выделится новый участок памяти в куче с ссылкой на первый экземпляр
Блин, не понимаю. Это ведь переменная ссылается на место в памяти, а не память ссылается на переменную. Я совсем запутался. Извиняйте.
0
Эксперт .NET
5531 / 4296 / 1216
Регистрация: 12.10.2013
Сообщений: 12,329
Записей в блоге: 2
12.07.2014, 22:49 16
Pro100Tom, http://habrahabr.ru/post/165597/
2
154 / 31 / 11
Регистрация: 29.10.2012
Сообщений: 397
12.07.2014, 22:51 17
Цитата Сообщение от Midian Посмотреть сообщение
Поменяв первую строку, поменяются и остальные, и это логично.
Не меянется.
C#
1
2
3
4
string temp = "a";
            String first = new String(temp.ToCharArray());
            String second = first;
            first = "b";
0
1150 / 742 / 483
Регистрация: 21.01.2014
Сообщений: 1,903
13.07.2014, 00:12 18
Pro100Tom,
Могу ошибаться, но все же выскажусь
C#
1
String first = new String(temp.ToCharArray());
Создаем объект класса String и присваиваем переменной ссылку на это оъект
C#
1
String second = first
;
Присваиваем переменной second ссылку на тот же объект, на который ссылается first
C#
1
 first = "b";
Так как, строка неизменяема, то переменная first получает ссылку на новый объект класса стринг, а second продолжает ссылаться на первоначальный объект. Т.е. запись
C#
1
 first = "b";
равносильна
C#
1
first = new String("b".ToCharArray());
Добавлено через 6 минут
Ну и пример не на строках
C#
1
2
3
4
            A a1 = new A(1);
            A a2 = a1;
            a1.Value = 2; //меняем значение в классе на который ссылается a1
            Console.WriteLine(a2.Value);// тут выводится новое значение(2), т.к. a2 ссылается на тот же объект
C#
1
2
3
4
            A a1 = new A(1);
            A a2 = a1;
            a1 = new A(2); 
            Console.WriteLine(a2.Value);//тут выводится прежнее значение(1), т.к a2 ссылается на старый объект, а a1 на новый
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
    class A
    {
        public int Value { get; set; }
        public A(int value)
        {
            Value = value;
        }
    }
1
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
13.07.2014, 01:49 19
Лучший ответ Сообщение было отмечено ViterAlex как решение

Решение

Pro100Tom, для строк переопредлен оператор присваивания таким образом, что строка - единственный ссылочный тип, который при присваивании копирует не ссылку, а само значение строки.
1
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
13.07.2014, 02:32 20
Цитата Сообщение от Psilon Посмотреть сообщение
для строк переопредлен оператор присваивания таким образом, что строка - единственный ссылочный тип, который при присваивании копирует не ссылку, а само значение строки.
или я не понял или тут что-то не верно, продолжи мысль
0
13.07.2014, 02:32
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.07.2014, 02:32
Помогаю со студенческими работами здесь

В чём разница между написанием с большой и с маленькой буквы
Здравствуйте! Объясните, пожалуйста, чем отличается Boolean от boolean, int от Integer? И почему...

Опрос=вопрос: Клюевые запросы с маленькой и большой буквы
Продвигаем сайты под регион &quot;Екатеринбург&quot;. Выдача соответственно отличается: если вводить...

Выводит неправильно слова с большой буквы, т.е и с маленькой тоже
Задача вводить строки, пока не будет введено 5 с большой буквы. Вывести всё введённое и только с...

Название населенного пункта с большой буквы, а характеристика его с маленькой
Добрый день. Можно ли каким-то образом привести текст типа:&quot;МОСКОВСКАЯ ОБЛАСТЬ, ГО ПОДОЛЬСК, УЛ....

Как сделать, чтобы бот реагировал на слова с большой и маленькой буквы
Как сделать так чтобы бот реагировал на слова с большой и маленькой буквы тоесть a=int(input())...

Можете проверить код? Задание: Посчитать количество слов с Большой и Маленькой буквы
В Файле просто текст+ он не понимает русский язык. Посчитать количество слов с большой и малой я...

Если первое слово, идущее за точкой, начинается с маленькой буквы, заменить эту букву большой
Требуется создать приложение, которое считывает строку текста, состоящую только из слов записанных...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru