C# 복습하기 8) 프로퍼티

 

Value 튜플

 - 여러 필드를 담을 수 있는 구조체. (Tuple과 ValueTuple은 다르다!)

 - System.ValueTuple 구조체를 기반으로 만들어짐.

 - 명명되지 않은 튜플과 명명된 튜플끼리는 필드의 수와 형식이 같다면 할당이 가능함.

var tuple = (Name: "테스트", Age : 15); // 명명된 튜플
var tuple2 = ("테스트", 15); // 명명되지않은 튜플
var tuple = (Name: "테스트", Age: 15);
var (name, age) = tuple;
Console.WriteLine(name);

var (name2, _) = tuple; // 특정 필드를 무시할 수 있음
Console.WriteLine(name2);

 

Tuple과 ValueTuple

 - Tuple은 클래스고, ValueTuple은 구조체이다.

 - Tuple은 item들이 속성이며, 읽기 전용이라 변경이 불가능하다.

 - ValueTuple은 item들이 필드이며, 변경이 가능하다.

 - 일반적으로는 ValueTuple을 이야기하는 듯.

MS 무명 형식과 튜플 형식 중에서 선택
https://docs.microsoft.com/ko-kr/dotnet/standard/base-types/choosing-between-anonymous-and-tuple

 

무명 형식

 - 아래와 같이 선언가능하다.

var myInstance = new { Name = "이름", Age = "15" };

 - 읽기 전용이라 한번 할당하고 나면 변경이 불가능하다.

 - 한번 만들고 다시는 사용하지 않을 때 유용한데, 특히 LINQ와 함께 사용되는 편.

 - 튜플과 많이 비교된다.

 

 

인터페이스의 프로퍼티

 - 인터페이스는 메서드뿐만 아니라 프로퍼티와 인덱서를 가질 수 있다.

 - 인터페이스의 프로퍼티는 자동 구현 프로퍼티와 동일한 형태를 가지며, 파생 클래스는 반드시 구현해야 한다.

 - 반드시 구현해야 하지만, 파생 클래스에서도 역시 자동 구현으로 구현하여도 된다.

interface IBaseInter
{
    int MyValue{ get; set; } 
}

class MyClass : IBaseInter
{
    private int _myValue;
    public int MyValue
    {
        get{ return _myValue; }
        set{ _myValue = value; }
    }
}

 

추상 클래스와 추상 프로퍼티

 - 일반 클래스와 동일하게 구현된 프로퍼티도 가질 수 있지만, 인터페이스처럼 구현되지 않은 프로퍼티도 가질 수 있다.

 - 차이는 파생 클래스의 강제 구현의 여부

abstract class MyAbClass
{
    abstract int MyProperty
    {
        get; set;
    }
}

 

 

 

 

 

 

 

댓글

Designed by JB FACTORY