Задать вопрос
@CityzenUNDEAD

Какие данные могут находится в переменных типа класса?

Всем здаров!
Может вопрос покажется кому-то тупым, но я реально не могу его втащить никак.
class MyClass
{
    MyClass my;
}


То есть, я создаю переменную типа MyClass, а что это значит, какие данные эта переменная может содержать?
Ну там, int - может содержать только числа, string - только строки, bool - только true или false.
А переменная типа MyClass что может содержать тогда?
  • Вопрос задан
  • 164 просмотра
Подписаться 1 Простой 4 комментария
Пригласить эксперта
Ответы на вопрос 3
Casper-SC
@Casper-SC
Программист (.NET)
В коде есть комментарии, которые нужно прочитать.

Переменная типа MyClass, когда под неё выделят память будет содержать ссылку на MyClass со значением по умолчанию null.

Данные в полях класса могут быть:
  • экземпляры классов -- class; ссылочный тип данных (Reference Type)
  • экземпляры структур -- struct, enum; тип значений (Value Type)


Размеры типов значений
Ссылочные типы
Типы значений

using System;

namespace Types
{
    public class Person
    {
        public string FirstName { get; set; }

        public int Age { get; set; }
    }

    class Program
    {
        static void Main(string[] args)
        {
            // Так как class это ссылочный тип данных (Reference Type), то
            // в стеке создаётся ссылка на экземпляр класса Person,
            // под который выделена память в области, называемой кучей (Heap).
            var person = new Person
            {
                FirstName = "John",
                Age = 30
            };
            // Передаём в метод ссылку. Ссылка копируется, а данные
            // так и остаются в куче, с ними ничего не происходит.
            // Данных может быть хоть мегабайт, они не копируются, а вот
            // ссылка копируется и имеет разный размер в зависимости от 
            // архитектуры x86 или x64, но размер этот крайне маленький (4 байта или 8 байт)
            Display(person);
            
            Console.ReadKey();
        }
        
        private static void Display(Person person)
        {
            // Здесь внутри метода находится копия ссылки.
            Console.WriteLine($"Name = {person.FirstName}, Age = {person.Age.ToString()}");
        }
    }
}


-
            // Ссылка, так как это class
            Person person; 

            // Ссылка на экземпляр класса, так как мы выделили память в куче.
            person = new Person();


using System;

namespace Types
{
    class MyClass
    {
        MyClass my;
    }

    class Program
    {
        static void Main(string[] args)
        {
            // Выделяем память в куче.
            // Ссылается на экземпляр класса MyClass, внутри
            // которого есть поле типа MyClass со значением null.
            MyClass data = new MyClass();

            Console.ReadKey();
        }
    }
}
Ответ написан
Комментировать
HemulGM
@HemulGM
Delphi Developer, сис. админ
Класс - это тоже тип, как и int, string, bool...
Т.е. написав это ты создаешь новый тип данных. Тип данных, который называется MyClass в данном случае.

Этот тип данных хранит уже то, что ты там напишешь.
Ответ написан
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
Не парьтесь все что не натив то Object, но и натив можно упаковать в обджект
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы