* Property
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _2020._09._15_001
{
class Facto
{
public int MyProperty { get; set; }
}
class Tclass
{
public int a;
public int b;
public string s;
public override string ToString()
{
return "[" + a + "]" + "[" + b + "]" + "[" + s + "]";
}
}
struct Tstruct
{
}
class Program
{
static void Main(string[] args)
{
Tclass aTclass = new Tclass();
aTclass.a = 100;
aTclass.b = 200;
aTclass.s = "hello";
Console.WriteLine(aTclass);
}
}
}
- 결과
* struct
- 결과
* class와 struct의 차이
한 마디로 class는 힙영역에 객체 참조 변수가 생기고 struct는 stack영역에 만들어진다.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _2020._09._15_001
{
class Facto
{
public int MyProperty { get; set; }
}
class Tclass
{
public int a;
public int b;
public string s;
public override string ToString()
{
return "[" + a + "]" + "[" + b + "]" + "[" + s + "]";
}
}
struct Tstruct
{
public int a;
public int b;
public string s;
public override string ToString()
{
return "[" + a + "]" + "[" + b + "]" + "[" + s + "]";
}
/*public Tstruct() // struct에서 default생성자는 안된다.
{
}*/
/*public Tstruct(int temp1)
{
}*/
}
class Program
{
static void Main1(string[] args)
{
/*Tclass aTclass = new Tclass();
aTclass.a = 100;
aTclass.b = 200;
aTclass.s = "hello";
Console.WriteLine(aTclass);
Tclass aTclass1;
aTclass1.a = 100;
aTclass1.b = 200;
aTclass1.s = "hello";
Console.WriteLine(aTclass1);*/
// class는 객체 생성없이 사용 불가능
//-------------------Property--------------
Tstruct aTsturct1 = new Tstruct();
aTsturct1.a = 100;
aTsturct1.b = 101;
aTsturct1.s = "헬로";
Console.WriteLine(aTsturct1);
Tstruct aTsturct2;
aTsturct2.a = 102;
aTsturct2.b = 103;
aTsturct2.s = "헬로 키티";
Console.WriteLine(aTsturct2);
// struct는 객체 생성없이 사용가능 - 특징 1
//Tstruct aTsturct2;
//aTsturct2.a = 100;
//aTsturct2.b = 200;
//aTsturct2.s = "hello";
//Console.WriteLine(aTsturct2);
// struct는 stack에 생성된다.
// 변수가 있어야 aTstruct2를 생성하기 때문에 변수 값이 자동으로 초기화되지 않는다. - 특징 2
// 구조체는 객체가 아니다. - 특징 3
Tclass aTclass1 = new Tclass();
aTclass1.a = 100;
aTclass1.b = 101;
aTclass1.s = "헬로우";
Console.WriteLine(aTclass1);
Tclass aTclass2 = new Tclass();
aTclass2.a = 102;
aTclass2.b = 103;
aTclass2.s = "헬로우 키티";
Console.WriteLine(aTclass2);
aTsturct1 = aTsturct2;
aTclass1 = aTclass2;
Console.WriteLine("----------------------------");
Console.WriteLine(aTsturct1);
Console.WriteLine(aTsturct2);
Console.WriteLine(aTclass1);
Console.WriteLine(aTclass2);
Console.WriteLine("----------------------------");
aTsturct1.a = 500;
aTclass1.a = 500;
Console.WriteLine(aTsturct1);
Console.WriteLine(aTsturct2);
Console.WriteLine(aTclass1);
Console.WriteLine(aTclass2);
}
static void Main(string[] args)
{
Tstruct aTstruct1 = new Tstruct();
Console.WriteLine(aTstruct1);
Tstruct aTstruct2 = new Tstruct(700);
Console.WriteLine(aTstruct2);
}
}
}
* ref
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _2020._09._15_002
{
class Program
{
static void test1(int iArg1, ref int iArg2)
{
iArg1 = 100;
//iArg2 = 200;
}
static void test2(int iArg1, out int iArg2)
{
iArg1 = 100;
iArg2 = 200;
}
static void Main1(string[] args)
{
int iNum1 = 1000;
int iNum2 = 2000;
test1(iNum1, ref iNum2);
Console.WriteLine(iNum1);
Console.WriteLine(iNum2);
}
static void Main(string[] args)
{
int iNum1 = 1000;
int iNum2 = 2000;
test2(iNum1, out int iNum2);
Console.WriteLine(iNum1);
Console.WriteLine(iNum2);
}
}
}
* delegate
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _2020._09._15_005
{
class Program
{
// DELEGATE : 메서드이름을 저장하는 DATATYPE을 델리게이트라고 한다.
// 메서드를 개발자가 만들면 상황에 따라 반환값과 인자의 개수, 인자의 타입이 다르다.
// 그러므로 한가지 모양의 델리게이트를 정의할수 없기 때문에
// 개발자가 델리게이트를 저장하는 자료형을 직접 만들어줘야 한다.
/// <summary>
/// 델리게이트 코딩 방법
/// </summary>
/// <param name="Num1"></param>
/// <param name="Num2"></param>
/// <returns></returns>
static int addInt (int Num1, int Num2)
{
return Num1 + Num2;
}
delegate int Facto(int Num1, int Num2); // Facto가 addInt메서드를 대변한다.
static int MulInt(int num1, int num2)
{
return num1 * num2;
}
//delegate int MulFacto(int num3, int num4);
static void Main(string[] args)
{
int sum;
// aFacto는 Facto type이다.
Facto aFacto;
// aFacto와 addInt의 자료형(type)이 같다. // int _ (int, int) 라는 새로운 모양의 자료형을 내가 만든 것이다.
aFacto = addInt;
sum = aFacto(3, 4);
Console.WriteLine(sum);
Console.WriteLine("-------------------");
aFacto = MulInt;
sum = aFacto(3, 4);
Console.WriteLine(sum);
}
}
}
'C#' 카테고리의 다른 글
2020.09.17 - 온/습도 모듈 센서를 이용, 차트 작성 (0) | 2020.09.17 |
---|---|
2020.09.16 (0) | 2020.09.16 |
2020.09.11 - 온/습도 측정하기 / 리눅스 (0) | 2020.09.11 |
2020.09.10 - (0) | 2020.09.10 |
2020.09.09 - C# Visualization (0) | 2020.09.09 |