pranav8265 Ответов: 3

Как найти размер объекта класса и статического класса ?


1. я хочу знать, можно ли найти размер объекта класса.

2.Если объект класса не содержит никаких данных(объект с нулевым значением), то какой размер будет показан.

3. Мы можем найти размер статического класса .

Что я уже пробовал:

Рассмотрим следующие классы:

public class Student
{
public int ID {get;set;}
public string Name {get;set;}
public string StuClass{get;set;}
}

public static class Teacher
{
public int EmpID{get;set;}
public string Name{get;set;}
public sting MonitoringClass{get;set;}
}


каков будет результат следующего :

Student std1=new Student{1,"Test","Class2"};
Student std2=new Student();
int size1=sizeof(std1);//object has some data
int size2=sizeof(std2);//null object
int size3=Teacher{1,"TeacherTest","Class2"};//static class 


Когда я пытаюсь выполнить его ,я получаю следующую ошибку:

1. ошибка CS0246: не удалось найти тип или имя пространства имен "std1". Вам не хватает ссылки на сборку?

1. 'GridToExcel.Тест.Teacher' не имеет предопределенного размера, поэтому sizeof можно использовать только в небезопасном контексте (рассмотрим использование System.Runtime.InteropServices.Marshal.SizeOf) D:\SampleProjects\GridToExcel\GridToExcel\Test.aspx.cs 32 25 GridToExcel

что я делаю не так??

Richard MacCutchan

Почему бы просто не запустить этот код, и вы сами увидите результаты?

pranav8265

я получаю следующую ошибку :
ошибка CS0246: не удалось найти тип или имя пространства имен "std1". Вам не хватает ссылки на сборку?

Philippe Mori

Обычно вам не нужно знать фактический размер объекта в управляемом мире... Таким образом, ваш вопрос в основном неуместен в .NET, за исключением целей взаимодействия.

Также сообщение об ошибке сообщит вам о проблемах. По существу:
Ошибка №1: sizeof ожидайте тип, а не переменную.
Ошибка №2: sizeof не может быть использован в этом контексте. Может быть Marshal.SizeOf может быть, это то, что вам нужно.

3 Ответов

Рейтинг:
20

Richard MacCutchan

Видеть sizeof (ссылка на C# )[^].


Maciej Los

5ед!

Рейтинг:
1

pranav8265

спасибо вам за помощь .Я обнаружил, что sizeof используется для поиска размера неуправляемого типа (int,float и т. д.).поэтому я провел кое-какие поиски и обнаружил вот что.

Marshal.SizeOf Метод (Тип) (System. Runtime.InteropServices)

В следующем примере демонстрируется вызов метода SizeOf. Этот пример кода является частью более крупного примера, предоставленного для класса Marshal.

// Demonstrate the use of the SizeOf method of the Marshal class.
Console.WriteLine("Number of bytes needed by a Point object: {0}", 
    Marshal.SizeOf(typeof(Point)));
Point p = new Point();
Console.WriteLine("Number of bytes needed by a Point object: {0}",
    Marshal.SizeOf(p));


Рейтинг:
0

Maciej Los

Похоже, вы можете найти ответ на свой вопрос, но сначала вам нужно устранить ошибки компилятора.

Следовать инструкциям:
Ошибка компилятора CS0246[^]
Ошибка компилятора CS0233[^]