在 C# 中,类和结构都用于定义自定义数据类型,但它们之间存在一些差异。
继承:类可以继承其他类,但结构不能。换句话说,一个类可以从另一个类派生,但结构不能。
引用类型与值类型:类是引用类型,这意味着当您创建类的对象时,会创建对该对象的引用,并且在使用该引用的任何地方都会反映对该对象的更改。另一方面,结构是一种值类型,这意味着当您创建结构类型的变量时,该变量的实际值存储在内存中,并且对该变量的更改不会反映在其他地方。
- 默认构造函数:类总是有一个默认构造函数,在创建该类的对象时调用该构造函数。另一方面,结构默认没有默认构造函数。但是,如果需要,您可以在结构中定义默认构造函数。
- 初始化:当您创建类的对象时,其成员将被初始化为其默认值(即引用类型为 null,值类型为 0)。当您创建结构类型的变量时,其成员也会初始化为其默认值。但是,您也可以在创建结构类型的变量时为该结构的成员提供初始值。
- 大小和性能:结构的大小通常比类小,因为它们不包含任何引用变量或开销。这意味着结构作为参数传递或复制比类更快。
A 类是用户定义的蓝图或原型,用于创建对象。本质上,一个类将字段和方法(定义操作的成员函数)组合成一个单元。
例子:
C#
// C# program to illustrate the
// concept of class
using System;
// Class Declaration
public class Author {
// Data members of class
public string name;
public string language;
public int article_no;
public int improv_no;
// Method of class
public void Details(string name, string language,
int article_no, int improv_no)
{
this.name = name;
this.language = language;
this.article_no = article_no;
this.improv_no = improv_no;
Console.WriteLine("The name of the author is : " + name
+ "\nThe name of language is : " + language
+ "\nTotal number of article published "
+ article_no + "\nTotal number of Improvements:"
+" done by author is : " + improv_no);
}
// Main Method
public static void Main(String[] args)
{
// Creating object
Author obj = new Author();
// Calling method of class
// using class object
obj.Details("Ankita", "C#", 80, 50);
}
}
The name of the author is : Ankita The name of language is : C# Total number of article published 80 Total number of Improvements: done by author is : 50
A 结构体是单个单元下不同数据类型的变量的集合。它几乎类似于类,因为两者都是用户定义的数据类型,并且都保存一堆不同的数据类型。
例子:
C#
// C# program to illustrate the
// concept of structure
using System;
// Defining structure
public struct Car
{
// Declaring different data types
public string Brand;
public string Model;
public string Color;
}
class GFG {
// Main Method
static void Main(string[] args)
{
// Declare c1 of type Car
// no need to create an
// instance using 'new' keyword
Car c1;
// c1's data
c1.Brand = "Bugatti";
c1.Model = "Bugatti Veyron EB 16.4";
c1.Color = "Gray";
// Displaying the values
Console.WriteLine("Name of brand: " + c1.Brand
+ "\nModel name: " + c1.Model
+ "\nColor of car: " + c1.Color);
}
}
Name of brand: Bugatti Model name: Bugatti Veyron EB 16.4 Color of car: Gray
类和结构之间的区别
类 |
结构 |
---|---|
类是引用类型。 |
结构体是值类型。 |
所有引用类型都分配在堆内存上。 |
所有值类型都分配在堆栈内存上。 |
大引用类型的分配比大值类型的分配更便宜。 |
与引用类型相比,分配和 de-allocation 在值类型中更便宜。 |
类具有无限的函数。 |
结构体的函数有限。 |
类一般用在大型程序中。 |
结构体用于小程序中。 |
类可以包含构造函数或析构函数。 |
结构不包含无参数构造函数或析构函数,但可以包含参数化构造函数或静态构造函数。 |
类使用 new 关键字来创建实例。 |
struct 可以创建一个实例,有或没有 new 关键字。 |
一个类可以继承另一个类。 |
不允许结构体继承另一个结构体或类。 |
类的数据成员可以受到保护。 |
struct 的数据成员无法受到保护。 |
类的函数成员可以是虚拟的或抽象的。 |
结构体的函数成员不能是虚拟的或抽象的。 |
类的两个变量可以包含同一个对象的引用,并且对一个变量的任何操作都可以影响另一个变量。 |
struct 中的每个变量都包含自己的数据副本(除了 ref 和 out 参数变量),对一个变量的任何操作都不会影响另一个变量。 |
总之,C# 中的类和结构之间的主要区别是继承、引用类型与值类型、默认构造函数、初始化和大小/性能。类通常用于更大、更复杂的对象,而结构则用于更小、更简单、经常使用且需要快速传递的对象。然而,类和结构都有各自的优点和缺点,它们之间的选择最终取决于项目的具体要求。
相关用法
- C# Console.MoveBufferArea()用法及代码示例
- C# Convert.ToBase64String()用法及代码示例
- C# Convert.ToBase64CharArray()用法及代码示例
- C# Char.GetUnicodeCategory(String, Int32)用法及代码示例
- C# Console.WindowLeft用法及代码示例
- C# Console.WindowWidth用法及代码示例
- C# Char.CompareTo()用法及代码示例
- C# Char.Equals()用法及代码示例
- C# Char.GetHashCode()用法及代码示例
- C# Char.GetNumericValue()用法及代码示例
- C# Char.GetTypeCode()用法及代码示例
- C# Char.IsDigit()用法及代码示例
- C# Char.IsLetter()用法及代码示例
- C# Char.IsLetterOrDigit()用法及代码示例
- C# Char.IsLower()用法及代码示例
- C# Char.IsNumber()用法及代码示例
- C# Char.IsPunctuation()用法及代码示例
- C# Char.IsSymbol()用法及代码示例
- C# Char.IsUpper()用法及代码示例
- C# Char.IsWhiteSpace()用法及代码示例
- C# Char.Parse(String)用法及代码示例
- C# Char.ToLowerInvariant(Char)用法及代码示例
- C# Char.ToString()用法及代码示例
- C# Char.ToUpperInvariant(Char)用法及代码示例
- C# CharEnumerator.Clone()用法及代码示例
注:本文由纯净天空筛选整理自ankita_saini大神的英文原创作品 Difference between Class and Structure in C#。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。