Являются ли объекты типом переменной или именем, данным переменным внутри класса? - PullRequest
2 голосов
/ 04 марта 2020

У меня очень базовое c понимание OOP, но я немного запутался в том, что представляет собой объект, так что извините, если это звучит как глупый вопрос.

public class StatMetaData
{
    public string key { get; set; }
    public string name { get; set; }
    public string categoryKey { get; set; }
    public string categoryName { get; set; }
    public bool isReversed { get; set; }
}

В мой код Я использую этот класс для хранения проанализированной JSON информации, и я понимаю, как все это работает, но мне было интересно, если эти переменные являются частью своего собственного класса, они считаются объектами? Или же он должен иметь тип данных object, который классифицируется как объект?

Если я полностью не в себе понимаю, любая помощь будет высоко оценена, веб-сайты, на которые я смотрел, не будут дать очень хорошее определение того, что на самом деле может быть классифицировано как объект.

Ответы [ 4 ]

4 голосов
/ 04 марта 2020

В C# объект - это структурированный кусок памяти в куче. Структура определяется классом, экземпляром которого является объект. Экземпляры классов object, string и ваши StatMeataData являются объектами.

Переменные, поля и свойства сами по себе не являются объектами, но могут хранить ссылку на один из них.

2 голосов
/ 04 марта 2020

В c# почти все является объектом, давайте возьмем ваш код, например:

public class StatMetaData
{
    public string key { get; set; }
    public string name { get; set; }
    public string categoryKey { get; set; }
    public string categoryName { get; set; }
    public bool isReversed { get; set; }
}

все элементы ниже верно:

object c = new StatMetaData(); //thus the instance of the class is an object
object k = new StatMetaData().Key; //an instance of string is also an object
object b = new StatMetaData().isReversed; //an instance of bool is also an object

Проще говоря (и это выходит за рамки этого простого утверждения), скажем, объект - basically anything that you store in memory. Когда вы объявляете класс типа StatMetaData, у вас нет объекта, потому что нет экземпляра, вы просто объявляете Type ... только когда вы создаете новый экземпляр StatMetaData, у вас есть объект в память.

Также обратите внимание, что, например, object myObj; не является объектом в памяти, пока у вас не будет что-то вроде object myObj = new object();, тип объекта также является типом.

1 голос
/ 04 марта 2020

Попробуйте это ...

"Определение класса" - это то, как будет выглядеть объект, созданный из этого класса. Он определяет свойства (такие как key и name), которые могут использовать другие, и методы , которые могут вызывать другие. Кроме того, он может определять «личные» вещи, которые будет видеть только объект. Это, если хотите, рецепт для создания фактического объекта.

Тогда «объект» является конкретным экземпляром определенного класса: память выделена, инициализация имеет было завершено, и теперь у вас есть прыгающий ребенок "экземпляр".

0 голосов
/ 04 марта 2020

Редактировать Только что выяснил, и в C# все является объектом, в Java для типов значения экземпляра не рассматриваются Объекты

Все типы значений неявно наследуются из класса System.ValueType, который, в свою очередь, наследует от объекта класса.

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

Вы можете прочитать о типах значений здесь .

Основные типы значений:

  • Структуры
  • Перечисления
  • Интегральные числа c типы
  • Числа с плавающей точкой c типы
  • bool, представляющие логическое значение
  • char, представляющий символ Unicode UTF-16

Типы значений обычно хранятся в стеке, а ссылочные типы - в куче. Но если типы значений являются частью ссылочного типа, они будут храниться вместе со своим ссылочным типом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...