Notice
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- NavMesh
- unity 병합
- stateauthority
- 깃허브 데스크탑 합치기
- networkobject
- 오브젝트 깜빡임
- networkobject.networkid
- m585
- unity merge
- 유니티 합치기
- nav오브젝트사이거리
- 유니티 해상도
- 유니티 머지
- githubdesktopmerge
- 유니티 해상도 변경
- m585 수리
- unity git
- M590
- 유니티
- m590 수리
- nav거리
- Unity
- Github DeskTop Merge
- 유니티 해상도 설정
- 몬스터
- 유니티 브랜치 merge
- networkbehaviourid
- navigation
- 깃허브 데스크탑 병합
Archives
- Today
- Total
집게사장의 꿈
구조체 확장자 본문
구조체에 대한 Operator를 만들고 싶다면?
아쉽게도, 직접적인 + - 와 같은 연산자 오퍼레이터는 사용할 수 없다
그럼 방법은?
public하고 static한 "확장자"를 사용하는 것이다.
하지만, 이것도 되는 경우와 안되는 경우가 있다.
예를 들어 BigInteger라는 구조체가 있다고 해보자
안되는 경우
this BigInteger
this를 통한 단순한 값에 대한 복사는 직접적인 참조가 불가능 해 실제 값은 변경할 수 없다.
using UnityEngine;
using System.Numerics;
public class Testing : MonoBehaviour
{
private void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
BigInteger integer = 0;
integer.Add(3);
Debug.Log(integer.ToString());
}
}
}
public static class Extension
{
public static void Add(this BigInteger b_int, int a)
{
b_int += a;
}
}
되는 경우
ref this BigInteger
ref 를 통한 직접적인 참조는 실제 값이 변경된다.
using UnityEngine;
using System.Numerics;
public class Testing : MonoBehaviour
{
private void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
BigInteger integer = 0;
integer.Add(3);
Debug.Log(integer.ToString());
}
}
}
public static class Extension
{
public static void Add(ref this BigInteger b_int, int a)
{
b_int += a;
}
}
그렇다면, 내가 직접 만든 구조체는 어떨까?
아래와 같은 고양이 구조체가 있고, 나는 구조체를 확장해서 사용하고 싶다.
[System.Serializable]
public struct Cat
{
public int age;
public string name;
}
확장자는 이렇게 선언했고
public static void Repalce(this Cat cat, int age, string name)
{
cat.age = age;
cat.name = name;
}
사용은 아래와 같이 한다
private void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
myCat.Repalce(100, "깃");
}
}
'this Cat" 의 경우
초기값은 아래와 같은데, Space를 눌렀을 때는 전혀 반영이 되지 않았다.
"ref this Cat" 의 경우
반면 ref를 붙인다면, 값의 변경이 반영이 되는 것을 알 수 있다.
그렇다면, 이것으로 미리 정의된 구조체에 대해 연산자는 직접적으로 만들지는 못해도, 확장해서 사용할 수 있다.
기본적이지만, 알면 유용한 정보!
'기타 > C#' 카테고리의 다른 글
백준 C# 1916 내려가기 (0) | 2024.08.14 |
---|---|
2의 보수 (0) | 2024.07.31 |
LINQ 정렬 메서드 (3) | 2024.07.24 |
LINQ SelectMany 시퀀스 평면화 (0) | 2024.07.24 |
LINQ 집합 (0) | 2024.07.23 |