반응형

C#에서는 메서드에 파라미터를 전달할 때, 개수가 정해지지 않은 경우 params 키워드를 사용할 수 있습니다. params 키워드를 사용하면, 메서드 호출 시 전달되는 인자의 개수를 동적으로 결정할 수 있습니다. 

params 키워드의 사용 방법

params 키워드는 메서드의 파라미터 선언에서 가변 개수의 인자를 받을 파라미터에 사용됩니다. params 키워드 다음에는 배열의 형태로 받을 인자의 자료형을 명시합니다. 예를 들어, 아래와 같이 선언된 Sum 메서드는 params 키워드를 사용하여 가변 개수의 정수형 인자를 받습니다.

public static int Sum(params int[] numbers) {
  int sum = 0;
  foreach(int number in numbers) {
    sum += number;
  }
  return sum;
}

params 키워드로 선언된 매개변수를 사용하여 메서드를 호출할 때에는 두가지 방법이 있습니다.

1. 개별 인수로 호출: params 키워드로 선언된 매개변수에 다음과 같이 가변 인수를 전달할 수 있습니다.

int result = Sum(1, 2, 3, 4, 5); // 15

2. 배열로 호출: params 키워드로 선언된 매개변수에 배열 형태로 전달할 수 있습니다.

int[] myArray = { 1, 2, 3, 4, 5 };
int result = Sum(myArray);

params 키워드 사용 시 주의할 점

params 키워드를 사용할 때는 다음과 같은 주의점이 있습니다.

  1. params 키워드를 사용하는 파라미터는 하나만 선언할 수 있습니다.
  2. params 키워드로 선언된 파라미터는 메서드의 마지막 파라미터로 선언되어야 합니다.
  3. params 키워드를 사용하는 파라미터는 기본값을 설정할 수 없습니다.
  4. params 키워드를 사용하는 파라미터는 ref 또는 out으로 전달될 수 없습니다.

 

반응형

'개발정보' 카테고리의 다른 글

COM 구성 요소란  (0) 2023.03.20
[.net] interop 과 p/invoke  (0) 2023.03.20
[C#] Initializer(이니셜라이저)의 종류와 사용법  (0) 2023.02.13
[C#] 객체 초기화  (0) 2023.02.13
[C#] log4net 사용법  (0) 2023.02.08
반응형
"이니셜라이저(Initializer)"는 객체를 생성할 때 각 프로퍼티의 값을 직접 지정하여 객체를 초기화하는 기능을 의미합니다. 이니셜라이저를 사용하면, 객체 생성 코드를 간결하고 직관적으로 작성할 수 있습니다.

C#에서는 여러 종류의 Initializer를 사용할 수 있습니다. 아래에서는 각 Initializer의 종류와 사용법에 대해 살펴보겠습니다.

1. Object Initializer (객체 이니셜라이저)

객체를 생성한 후 각 프로퍼티의 값을 직접 지정하여 객체를 초기화할 수 있습니다.

class Car
{
    public string Make { get; set; }
    public string Model { get; set; }
    public int Year { get; set; }
}

Car myCar = new Car
{
    Make = "Toyota",
    Model = "Camry",
    Year = 2019
};

2. Collection Initializer (컬렉션 이니셜라이저)

컬렉션 객체를 생성할 때 원소를 초기화할 수 있습니다.

[참고]
"컬렉션(Collection)"이란, 하나의 데이터 구조로서 여러 개의 객체를 담을 수 있는 구조를 의미합니다. 컬렉션은 배열과 마찬가지로 여러 개의 객체를 담을 수 있지만, 배열과는 달리 컬렉션은 동적으로 크기를 조절할 수 있습니다.
C#에서 제공하는 컬렉션 클래스로는 List, ArrayList, Dictionary, HashSet, Queue, Stack 등이 있습니다. 이들 클래스를 사용하여 객체들을 저장, 검색, 정렬, 순회 등의 작업을 수행할 수 있습니다.

List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };

3. Array Initializer (배열 이니셜라이저)

배열 객체를 생성할 때 원소를 초기화할 수 있습니다.

int[] numbers = new int[] { 1, 2, 3, 4, 5 };

4. Anonymous Type Initializer (익명 타입 이니셜라이저)

익명 타입을 생성할 때 프로퍼티 값을 직접 지정할 수 있습니다.

var car = new { Make = "Toyota", Model = "Camry", Year = 2019 };

5. String Interpolation Initializer (문자열 보간 이니셜라이저)

문자열 내에 변수의 값을 직접 넣어서 새로운 문자열을 생성하는 문자열 보간 처리를 할 수 있습니다.

string message = $"The car is a {myCar.Year} {myCar.Make} {myCar.Model}.";

 

 

반응형

'개발정보' 카테고리의 다른 글

[.net] interop 과 p/invoke  (0) 2023.03.20
[C#] params 키워드  (0) 2023.02.15
[C#] 객체 초기화  (0) 2023.02.13
[C#] log4net 사용법  (0) 2023.02.08
[javascript] Closure(클로저)란  (0) 2023.01.31
반응형

C#에서 객체를 초기화하는 방법은 여러가지가 있습니다. 가장 기본적인 방법은 객체를 생성한 후 각 프로퍼티를 따로 지정하는 것입니다.

class Car
{
    public string Make { get; set; }
    public string Model { get; set; }
    public int Year { get; set; }
}
 
Car myCar = new Car();
myCar.Make = "Toyota";
myCar.Model = "Camry";
myCar.Year = 2019;

또 다른 방법으로는 생성자를 통한 객체 초기화가 있습니다. 생성자를 통해 객체를 생성할 때 필요한 프로퍼티 값들을 매개변수로 전달할 수 있습니다.

class Car
{
    public string Make { get; set; }
    public string Model { get; set; }
    public int Year { get; set; }
 
    public Car(string make, string model, int year)
    {
        Make = make;
        Model = model;
        Year = year;
    }
}
 
Car myCar = new Car("Toyota", "Camry", 2019);
 

마지막으로, C#에서는 Object Initializer 문법을 사용하여 객체를 초기화할 수 있습니다. 이 문법을 사용하면 객체를 생성할 때 필요한 프로퍼티 값들을 직접 지정할 수 있습니다.

class Car
{
    public string Make { get; set; }
    public string Model { get; set; }
    public int Year { get; set; }
}
 
Car myCar = new Car
{
    Make = "Toyota",
    Model = "Camry",
    Year = 2019
};
 

위의 코드에서는 new Car 이후에 각 프로퍼티의 값을 직접 지정하여 객체를 초기화하고 있습니다. 단, 값을 지정할 수 있는 것은 public 속성(property)만 가능 합니다.

위에서 언급한 3가지 방법 중 가장 편리한 방법은 Object Initializer 문법이며, 이 문법을 사용하면 간결하고 직관적인 코드를 작성할 수 있습니다.

반응형
반응형

Grid에서 특정 row를 선택하여 해당 row와 관련된 modeless 창을 띄우고 작업을 하는 도중,
원래 Form에서 Grid가 정렬되어 기존 row의 handle이 변경되었을 경우 단순히 FocusedRowHandle을 보관 했다가
찾아가는 방식은 사용할 수 없다(그리드 내에서 위치가 변경 되었으므로).
이때는 다음과 같이 DataSourceRowIndex를 보관 했다가, 해당 값으로 현재의 FocusedRowHandle 값을 찾아가야 한다.
DataSourceRowIndex는 DataSource내의 고유한 index이기 때문에 GridView에서 보여지는 형태와 관계없이 일정하게 유지 되므로 이 값을 가진 RowHandle을 찾아내는 방식이다.

// modeless 창을 띄우기 전에 현재 선택된 row의 DataSourceRowIndex를 보관
var rowIndex = gView1.GetFocusedDataSourceRowIndex(); 
.....
/*
  modeless 창을 띄우고 작업하는 도중, Grid가 정렬 되었다고 가정
*/
....
// modeless 창이 닫히고, 다시 원래의 FocusedRowHandle를 찾아가게 한다.
var rowHandle = GetRowHandleFromRowIndex(gView1, rowIndex);
gView1.FocusedRowHandle = rowHandle;
 
// DataSourceRowIndex를 가진 행을 찾아서 RowHandle 값으로 되돌린다.
private int GetRowHandleFromRowIndex(GridView gridView, int rowIndex) {
  int result = -1;
 
  for (int i = 0; i < gridView.DataRowCount; i++) {
    if (gridView.GetDataSourceRowIndex(i) == rowIndex) {
      result = i;
      break;
    }
  }
 
  return result;
}
반응형

+ Recent posts