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

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

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


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

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

кроме того, по поводу стека - очень расплывчато, оно запросто может оказаться и в регистре, от jit зависит.
...
Рейтинг: 0 / 0
13.02.2013, 23:21
    #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
13.02.2013, 23:41
    #38150413
Grigory_R
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
структурный вопрос
Lord British,
нет сомнения что поле класса (будь то ссылка на экземпляр класса или экземпляр структуры) будут в куче.
интересно как компилятор понимает что экземпляр наследника от ValueType в чистом виде (а не после упаковки или приведения к ссылочному типу и т.д.) окажется в стеке.
...
Рейтинг: 0 / 0
14.02.2013, 00:03
    #38150422
Lord British
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
структурный вопрос
Grigory_RLord British,
нет сомнения что поле класса (будь то ссылка на экземпляр класса или экземпляр структуры) будут в куче.
интересно как компилятор понимает что экземпляр наследника от ValueType в чистом виде (а не после упаковки или приведения к ссылочному типу и т.д.) окажется в стеке.

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

переопределить оператор сравнения с обжектом
...
Рейтинг: 0 / 0
19.02.2013, 13:31
    #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
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / структурный вопрос / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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