C
C
CityzenUNDEAD2020-07-04 17:48:36
C++ / C#
CityzenUNDEAD, 2020-07-04 17:48:36

What data can be stored in class type variables?

Hello everyone!
Maybe the question will seem stupid to someone, but I really can not drag it in any way.

class MyClass
{
    MyClass my;
}


That is, I create a variable of type MyClass, but what does this mean, what data can this variable contain?
Well there, int - can only contain numbers, string - only strings, bool - only true or false.
And what can a variable of type MyClass contain then?

Answer the question

In order to leave comments, you need to log in

3 answer(s)
B
Boris the Animal, 2020-07-04
@Casper-SC

There are comments in the code that you need to read.
A variable of type MyClass, when memory is allocated for it, will contain a reference to MyClass with a default value of null.
The data in the class fields can be:

  • class instances -- class; reference data type (Reference Type)
  • structure instances -- struct, enum; value type

Sizes of value
types Reference types
Value types
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();
        }
    }
}

H
HemulGM, 2020-07-04
@HemulGM

A class is also a type, just like int, string, bool...
I.e. by writing this you are creating a new data type. The data type, which is called MyClass in this case.
This data type already stores what you write there.

V
Vladimir Korotenko, 2020-07-04
@firedragon

Don’t worry, everything that is not native is Object, but native can also be packed into an object

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question