powered by simpleCommunicator - 2.0.57     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / структурный вопрос
9 сообщений из 9, страница 1 из 1
структурный вопрос
    #38150328
Grigory_R
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Коллеги, подскажите.
1. Как компилятор понимает что экземпляр класса Object следует разместить в куче
а его наследника, пользовательскую структуру (Structure MyStructure) -> ValueType -> Object в
стеке?
2. В то же время универсальная структура Public Structure Nullable(Of T As {Structure, New})
позволяет работать с объектом этого типа, так же как ссылочным типом.

Спасибо.
...
Рейтинг: 0 / 0
структурный вопрос
    #38150339
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Grigory_R,

Похоже, я отстал от жизни. Почему-то думал, что "куча" в стеке хранится. :(
...
Рейтинг: 0 / 0
структурный вопрос
    #38150355
Lord British
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Grigory_RКоллеги, подскажите.
Structure MyStructure) -> ValueType -> Object в стеке?


если ValueType это член класса, то будет храниться в куче.

если сделать object temp = valuetype_variable, то значение будет в куче.

кроме того, по поводу стека - очень расплывчато, оно запросто может оказаться и в регистре, от jit зависит.
...
Рейтинг: 0 / 0
структурный вопрос
    #38150404
Lord British
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
value type член класса
Код: sql
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.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication28
{
    class Program
    {
        static void Main(string[] args)
        {
            ZC heapRef1 = new ZC();
            ZC heapRef2 = new ZC();

            Console.WriteLine(heapRef1);
            Console.WriteLine(heapRef2);
        }
    }

    public struct Z
    {
        public int Val1;
        public float Val2;
        public double Val3;

    }

    public class ZC
    {
        public Z z;

        public ZC()
        {
            z.Val1 = 5;
        }
    }
}



Код: plaintext
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.
26.
27.
28.
29.
30.
31.
32.
33.
 !dumpheap 
PDB symbol for clr.dll not loaded
 Address       MT     Size
...
02f42548 01153884       24     
02f42560 01153884       24     
...

Statistics:
      MT    Count    TotalSize Class Name
...
01153884        2           48  ConsoleApplication28.ZC 
...

 !do 02f42548  
Name:        ConsoleApplication28.ZC
MethodTable: 01153884
EEClass:     011512f4
Size:        24(0x18) bytes
File:        ...\documents\visual studio 2012\Projects\ConsoleApplication28\ConsoleApplication28\bin\Debug\ConsoleApplication28.exe
Fields:
      MT    Field   Offset                 Type VT     Attr    Value Name
01153840  4000004        4 ...leApplication28.Z  1 instance 02f4254c z

!do 02f42560 
Name:        ConsoleApplication28.ZC
MethodTable: 01153884
EEClass:     011512f4
Size:        24(0x18) bytes
File:        ...\documents\visual studio 2012\Projects\ConsoleApplication28\ConsoleApplication28\bin\Debug\ConsoleApplication28.exe
Fields:
      MT    Field   Offset                 Type VT     Attr    Value Name
01153840  4000004        4 ...leApplication28.Z  1 instance 02f42564 z
...
Рейтинг: 0 / 0
структурный вопрос
    #38150413
Grigory_R
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Lord British,
нет сомнения что поле класса (будь то ссылка на экземпляр класса или экземпляр структуры) будут в куче.
интересно как компилятор понимает что экземпляр наследника от ValueType в чистом виде (а не после упаковки или приведения к ссылочному типу и т.д.) окажется в стеке.
...
Рейтинг: 0 / 0
структурный вопрос
    #38150422
Lord British
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Grigory_RLord British,
нет сомнения что поле класса (будь то ссылка на экземпляр класса или экземпляр структуры) будут в куче.
интересно как компилятор понимает что экземпляр наследника от ValueType в чистом виде (а не после упаковки или приведения к ссылочному типу и т.д.) окажется в стеке.

Это из серии вопросов поиск смысла в которых выворачивает мозг. В .NET много "классов" которые обрабатываются не по общим правилам. ValueType, Object и куча типов связанных с обертыванием Handle'ов и т. п.. Не надо в этом искать смысла, просто условились и решили так реализовать. Чисто технически, вероятно, компилятор, когда парсит текст твоей программы и видит struct считает его значимым, если ты в тексте ссылаешься на тип другой сборки, то компилятор определяет ссылочный он или значимый по метаданным сборки (которые когда то были получены, возможно, по определениям class/struct).
...
Рейтинг: 0 / 0
структурный вопрос
    #38152748
Grigory_R
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
подскажите,
как следует описать структуру, так чтобы экземпляр поддерживал синтаксис PeremStructure Is Nothing
...
Рейтинг: 0 / 0
структурный вопрос
    #38153366
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Grigory_Rподскажите,
как следует описать структуру, так чтобы экземпляр поддерживал синтаксис PeremStructure Is Nothing

переопределить оператор сравнения с обжектом
...
Рейтинг: 0 / 0
структурный вопрос
    #38157297
Grigory_R
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pation,

Public Structure myNullable
Dim myNullVar As Integer
End Structure

Dim myNullableInstance As myNullable?
If myNullableInstance Is Nothing Then
Console.WriteLine("myNullableInstance is Nothing")
End If

так?
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / структурный вопрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]