Классы являются ссылочными типами, а структуры - типами значений.
Когда я говорю, что классы являются ссылочными типами,
в основном они будут содержать адрес переменных экземпляра.
Например:
Class MyClass
{
Public Int DataMember; //By default, accessibility of class data members
//will be private. So I am making it as Public which
//can be accessed outside of the class.
}
В основном методе,
Я могу создать экземпляр этого класса, используя оператор new, который выделяет память для этого класса
и сохраняет базовый адрес этого в переменной типа MyClass (_myClassObject2).
Static Public void Main (string[] arg)
{
MyClass _myClassObject1 = new MyClass();
_myClassObject1.DataMember = 10;
MyClass _myClassObject2 = _myClassObject1;
_myClassObject2.DataMember=20;
}
В вышеуказанной программе
MyClass _myClassObject2 = _myClassObject1;
инструкция указывает, что обе переменные типа MyClass
- myClassObject1
- myClassObject2
и будет указывать на ту же ячейку памяти.
Он в основном назначает ту же ячейку памяти в другую переменную того же типа.
Так что, если какие-либо изменения, которые мы вносим в один из объектов типа MyClass, будут влиять на другой
поскольку оба указывают на одну и ту же ячейку памяти.
"_ myClassObject1.DataMember = 10;" в этой строке оба элемента данных объекта будут содержать значение 10.
"_myClassObject2.DataMember = 20;" в этой строке оба элемента данных объекта будут содержать значение 20.
В конце концов, мы получаем доступ к элементам данных объекта через указатели.
В отличие от классов, структуры являются типами значений.
Например:
Structure MyStructure
{
Public Int DataMember; //By default, accessibility of Structure data
//members will be private. So I am making it as
//Public which can be accessed out side of the structure.
}
Static Public void Main (string[] arg)
{
MyStructure _myStructObject1 = new MyStructure();
_myStructObject1.DataMember = 10;
MyStructure _myStructObject2 = _myStructObject1;
_myStructObject2.DataMember = 20;
}
В вышеуказанной программе
создание объекта типа MyStructure с помощью оператора new и
сохранение адреса в переменной _myStructObject типа MyStructure и
присваивание значения 10 элементу данных структуры с использованием "_myStructObject1.DataMember = 10".
В следующей строке
Я объявляю другую переменную _myStructObject2 типа MyStructure и присваиваю _myStructObject1 в нее.
Здесь компилятор .NET C # создает еще одну копию объекта _myStructureObject1 и
назначает эту ячейку памяти переменной MyStructure _myStructObject2.
Так что любое изменение, которое мы вносим в _myStructObject1, никогда не повлияет на другую переменную _myStructObject2 типа MyStructrue.
Вот почему мы говорим, что Структуры являются типами значений.
Таким образом, непосредственным базовым классом для класса является Object, а непосредственным базовым классом для Structure является ValueType, который наследуется от Object.
Классы будут поддерживать наследование, тогда как структуры не будут.
Как мы это говорим?
И в чем причина этого?
Ответ - Классы.
Он может быть абстрактным, запечатанным, статичным и частичным и не может быть частным, защищенным и защищенным внутри.