1. 메서드 작성
namespace Lab07
{
class Program
{
static void Main(string[] args)
{
int data1 = 100;
int data2 = 200;
int total = data1 + data2;
TotalProcess();
TotalProcess2(data1, data2); // 값 전달
int result = TotalProcess3(data1, data2); // 값 전달
string dataResult = TotalProcess4();
TotalProcess4; // 값을 돌려주는 데 지정할 공간이 없음 : 문제가 발생하지 않음(실제로는 하지 않는다)
}
private static string TotalProcess4()
{
string name = "홍길동";
return name;
}
// 매개변수가 있고, 돌려주는 것이 있는 메서드
private static int TotalProcess3(int data1, int data2)
{
int total = data1 + data2;
return total; // 리턴 타입의 경우 변수나 해당 값을 사용하면 문제 없음
}
// 매개변수가 있고, 돌려주는 것이 없는 메서드
private static void TotalProcess2(int inputData1, int inputData2) // 매개변수 이름은 호출하는 메서드의 변수 이름과 같이 하는 경우가 많음 : 호출하는 메서드의 변수를 확인하기 위해서
{
int total = inputData1 + inputData2;
}
// 해당 메서드는 매개 변수 없고 돌려주는 것이 없는 메서드 생성
private static void TotalProcess()
{
int totalData1 = 200;
int totalData2 = 300;
int total = totalData1 + totalData2;
}
}
}
2. 매개변수 전달
namespace Lab08
{
class Program
{
static int result; // 필드 - 전역변수
static void Main(string[] args)
{
// 값 전달
TotalProcess1(100, 200); // 값 전달 : 변수의 저장된 실제 값, 바로 값을 전달
// 참조 전달
int data1 = 2000;
TotalProcess2(ref data1); //참조 전달 : 변수의 위치(데이터의 위치를 전달 : 예 C/C++ 포인터 전달)
int data2;
TotalProcess3(out data2);//참조 전달 : out 전달
result = 0;
TotalProcess4(out data1);
TotalProcess5(ref data2); // 참조 전달 ref 규칙은 초기 값을 넣고 전달해야함 => 규칙임
}
private static void TotalProcess5(ref int data2)
{
data2 = 9999;
}
private static void TotalProcess4(out int data1)
{ // out으로 전달 받으면 꼭 전달받은 메서드에서 해당 변수의 값을 꼭 넣어야 됨.
data1 = 9215;
string tempData = "12345";
int data2;
bool check = int.TryParse(tempData, out data2); // 형변환 기능에서 out 키워드 사용
//data2 = int.Parse(tempData); //mutex - 응용 프로그램 중복실행 방지를 위해 out 키워드 사용
}
private static void TotalProcess3(out int data2)
{
data2 = 199;
result = 99999;
}
private static void TotalProcess2(ref int inputData)
{
inputData = 1;
}
private static void TotalProcess1(int v1, int v2)
{
int total = v1 + v2;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Lab09
{
class Program
{
static void Main(string[] args)
{
MyProcess(20, "홍길동"); // 값 형식의 매개변수
MyProcess(name: "길동이", age: 100); // 변수 이름을 지정하여 전달 C# 4.0부터 지원
// 실무에서는 권장하지 않음 : 팀 프로젝트에서 여러명이 개발할 경우
int total1 = Calc(100, 200, "*"); // 팀프로젝트에서 다른 언어를 사용한 사람이 있을 경우 권장하지 않음
int total2 = Calc(100, 200);
}
static int Calc(int data1, int data2, string calcType="+")
{
int result = 0;
if(calcType == "+")
{
result = data1 + data2;
}
else
{
result = 0;
}
return result;
}
static void MyProcess(int age, string name)
{
int total = age + 200;
string result = name + "님";
}
}
}
namespace Lab10
{
class Program
{
static void Main(string[] args)
{
// 내가 만든 데이터 타입을 가져다 사용하기
// 인스턴스를 해야함
MyClass m = new MyClass(); // m은 MyClass의 인스턴스 결과물 - 개체
string name = m.UserName("홍길동");
Program p = new Program(); // static에서 non static을 가져올 때에는 인스턴스를 하면 된다.
int age = p.UserAge();
}
int UserAge()
{
return 20;
}
}
class MyClass
{
public string UserName(string inputName)
{
return inputName + "님";
}
}
}
3. 여러 클래스를 여러 파일로 관리할 경우(여러사람과 같이 프로젝트를 작업할 경우)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Lab11
{
class Program
{
static void Main(string[] args)
{
UserInfo info = new UserInfo();
string name = info.UserName("홍길동");
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Lab11 //클래스를 여러 파일로 나눠서 관리할 때, namespace는 통일
{
class UserInfo
{
public string UserName(string inputData)
{
return inputData + "님";
}
}
}
4. 부모 클래스 상속
- 사용할 때 부모 클래스이름을 작성하여 상속
- 특정 소스코드를 수정할 수 없거나 기능을 추가해야할 경우, 해당 코드를 상속받아서 새로운 기능을 추가하여 작업
namespace Lab12
{
class Program
{
static void Main(string[] args)
{
//UserInfo info = new UserInfo();
ExtUserInfo info = new ExtUserInfo();
string name = info.UserName();
int age = info.UserAge();
string mail = info.UserEmailData();// 부모에서 protected 메서드로 선언하여 자식에서 가공하고 돌려줌
}
}
}
namespace Lab12
{
class UserInfo
{
public string UserName()
{
return "홍길동";
}
protected string UserMail()
{
return "aa@aa.co.kr";
}
}
}
namespace Lab12
{
class ExtUserInfo : UserInfo // 부모 클래스를 상속(UserInfo)
{
public int UserAge()
{
return 20;
}
public string UserEmailData()
{
string mail = base.UserMail();
return mail;
}
}
}
5. 개체 형 변환
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Lab13
{
class Program
{
static void Main(string[] args)
{
ExtMyCSL exCLs = new ExtMyCSL();
new Program().TypeExchange(exCLs); // 개체를 보냄
}
private void TypeExchange(object data)
{
// as 연산자
MyCLS cls = data as MyCLS; // 인스턴스를 하지 않고 Main에서 인스턴스 했기 떄문에 바로 사용 가능
// as 연산자는 형 변환이 불가능하면 오류 발생하기 때문에 아래와 같이 체크함
bool check = data is MyCLS; // 형 변환이 되는지 확인 후 가능하면 True
// 명시적으로 형 변환
MyCLS cls2 = (MyCLS)data; // 개체를 명시적으로 형변환
// 실무에서 하는 방법 : as 연산자보다 이 방법을 실무에서 선호함
if (data is MyCLS)
{
MyCLS cls3 = (MyCLS)data;
}
}
}
}
6. 네임스페이스 관리
- 여러명이 참여하는 프로젝트일 경우, 폴더와 파일별로 클래스를 관리하기 위해 다음과 같이 구성
- 실무 권장사항 : 1개의 네임스페이스 -> 1개의 클래스(최대 5개 안에)
'프로그래밍 > C#' 카테고리의 다른 글
8. C# 기초 4일차 (0) | 2021.11.04 |
---|---|
7. C# 기초 4일차 실습 (0) | 2021.11.04 |
5. C# 기초 -3일차 NET과 개체지향 프로그래밍 (0) | 2021.11.03 |
4. C# 기초 -2일차(실습) (0) | 2021.11.02 |
3. C# 기초 -2일차(이론) (0) | 2021.11.02 |