기사 디렉토리
값 유형 매개변수에 관해 이야기할 때 기본 데이터 유형과 구조라는 두 가지 측면에서 자세히 설명할 수 있습니다. 값 유형 매개변수는 참조가 아닌 값으로 함수나 메소드에 전달된 데이터를 참조합니다.
기본 데이터 유형
기본 데이터 유형의 값 유형 매개변수:
C#에서 기본 데이터 유형은 정수, 부동 소수점 숫자, 문자 등과 같은 내장 데이터 유형입니다. 이러한 데이터 유형은 값 유형이며 함수에 전달될 때 값별로 복사됩니다. 즉, 함수 내부의 매개변수를 수정해도 함수 외부의 원래 값에는 영향을 미치지 않습니다.
예:
void ModifyInt(int x)
{
x = 20; // 修改函数内的副本
}
int number = 10;
ModifyInt(number);
Console.WriteLine(number); // 输出:10,因为函数内的修改不影响原始值
구조
구조의 값 유형 매개변수:
구조는 여러 필드를 포함할 수 있는 사용자 정의 값 유형입니다. 구조를 함수에 매개변수로 전달하면 전체 구조의 복사본이 함수에 전달됩니다. 이는 함수 내부의 작업이 원래 구조 인스턴스에 영향을 미치지 않음을 의미합니다.
예:
struct Point
{
public int X;
public int Y;
}
void ModifyPoint(Point p)
{
p.X = 20; // 修改函数内的副本
}
Point point = new Point {
X = 10, Y = 15 };
ModifyPoint(point);
Console.WriteLine(point.X); // 输出:10,因为函数内的修改不影响原始结构体实例
구조에 대한 추가 추가 사항
C#에서는 구조체의 인스턴스를 생성할 때만 키워드를 사용해야 하며 , 기존 구조체 인스턴스를 할당하기 위해 new
사용할 필요는 없습니다 . new
이는 키워드를 사용하여 new
인스턴스를 생성하는 참조 유형(예: 클래스)과 다르며 =
연산자를 사용하여 한 인스턴스를 다른 인스턴스에 할당하여 두 변수가 동일한 인스턴스를 공유할 수 있습니다.
그러나 구조의 경우 =
연산자를 사용하면 동일한 인스턴스를 공유하는 대신 실제로 구조 값을 복사합니다. 따라서 대부분의 경우 new
하나의 구조체 인스턴스를 다른 구조체 인스턴스에 할당하지 않고 키워드를 사용하여 새 구조체 인스턴스를 생성하기만 하면 됩니다.
new
다음은 키워드를 사용하여 구조체의 인스턴스를 만드는 방법을 보여주는 간단한 예입니다 .
public struct Point
{
public int X;
public int Y;
public Point(int x, int y)
{
X = x;
Y = y;
}
}
class Program
{
static void Main(string[] args)
{
Point point1 = new Point(10, 20); // 创建并初始化结构体实例
Point point2 = new Point(30, 40); // 创建并初始化另一个结构体实例
Console.WriteLine($"point1: X = {
point1.X}, Y = {
point1.Y}"); // 输出:point1: X = 10, Y = 20
Console.WriteLine($"point2: X = {
point2.X}, Y = {
point2.Y}"); // 输出:point2: X = 30, Y = 40
}
}
new Point(10, 20)
위의 예에서는 및 구조의 new Point(30, 40)
서로 다른 두 인스턴스를 각각 생성하는 데 사용되었습니다 .Point
요약하다:
값 유형 매개변수가 함수 내에서 조작되면 원래 값이나 인스턴스가 아닌 함수에 전달된 복사본에만 영향을 미칩니다. 이는 기본 데이터 유형 및 구조에 적용되며 정수, 부동 소수점 숫자 또는 사용자 정의 구조가 전달되는지 여부에 관계없이 함수 내부의 값 유형 매개변수 수정은 함수 외부로 전달되지 않습니다. 이는 참조 유형 매개변수가 참조로 전달되고 함수 내의 매개변수에 대한 수정사항이 원래 객체에 영향을 미치는 참조 유형(예: 클래스)과 다릅니다.