C# 중급 – csharpstudy 유튜브 강의 정리
https://www.youtube.com/watch?v=T58M6aSanCw&list=PLiNvMfa_Y5hdz3Pitggrisaam_35ZqdtE
- C# 접근 제한자 (Access Modifier) 의 개념과 사용법
- C# 인터페이스 기초
- 인터페이스를 활용한 사례
C# 접근 제한자 (Access Modifier) 의 개념과 사용법
# 클래스 내부의 멤버에 대한 기본 액세스 권한은 private
# class 나 struct 의 기본 기본 액세스 권한은 internal
# internal 은 현재 어셈블리에서만 사용 가능함
# 어셈블리는 빌드하면 나오는 exe 파일이나 dll 파일을 말함
C# 인터페이스 기초
# 클래스 상속보다 더 가볍고 유연함
public interface ISendable
{
void Send(string msg);
}
class Email : ISendable
{
private string email = "admin@email.com";
public void Send(string msg)
{
Console.WriteLine($"Email {msg} to {email}");
}
}
class SnailMail : ISendable
{
public string Address = "admin@snailmail.com";
public void Send(string msg)
{
Console.WriteLine($"Snailmail {msg} to {Address}");
}
}
class SMS : ISendable
{
public string Phone = "010-0000-0000";
public void Send(string msg)
{
Console.WriteLine($"SMS {msg} to {Phone}");
}
}
private void InterfaceRun()
{
List<ISendable> deliveryMethods = new List<ISendable>();
deliveryMethods.Add(new Email());
deliveryMethods.Add(new SnailMail());
deliveryMethods.Add(new SMS());
Alert(deliveryMethods, "Emergency msg...");
}
private void Alert(List<ISendable> deliveryMethods, string msg)
{
foreach (var s in deliveryMethods)
{
s.Send(msg);
}
}
인터페이스를 활용한 사례
https://www.youtube.com/watch?v=o2yCt_m5RUU&list=PLiNvMfa_Y5hdz3Pitggrisaam_35ZqdtE&index=7
1. 프로젝트 추가 -> MyProject
2. 프로젝트 추가 -> MyPaintCustom1 // 서드파티에서 만든 라이브러리 Pie 클래스
3. 프로젝트 추가 -> MyPaintInterface // IDrawable 인터페이스
MyProject
public class Shape
{
public string Name { get; set; }
public string Tag { get; set; }
}
public class Rect : Shape, IDrawable
{
public void Draw(string s)
{
Console.WriteLine($"{s} Rect Console Write");
}
}
List<IDrawable> drawings = new List<IDrawable>();
// 서드 파티의 Pie 클래스
private void Pie_Click(object sender, RoutedEventArgs e)
{
Assembly custom = Assembly.LoadFrom(@"C:\Users\user1\source\repos\WpfTest1\MyPaintCustom1\bin\Debug\MyPaintCustom1.dll");
Type pie = custom.GetType("MyPaintCustom1.Pie");
IDrawable obj = (IDrawable)Activator.CreateInstance(pie);
obj.Draw($"{drawings.Count + 1}");
drawings.Add(obj);
}
private void Rect_Click(object sender, RoutedEventArgs e)
{
Rect obj = new Rect();
obj.Draw($"{drawings.Count + 1}");
drawings.Add(obj);
}
private void All_Click(object sender, RoutedEventArgs e)
{
foreach (IDrawable obj in drawings)
{
obj.Draw("");
}
}
MyPaintCustom1
// 서드파티에서 만든 Pie 클래스
namespace MyPaintCustom1
{
public class Pie : IDrawable
{
public void Draw(string s)
{
Console.WriteLine($"{s} Pie Console Write");
}
}
}
MyPaintInterface
// IDrawable 인터페이스
namespace MyPaintInterface
{
public interface IDrawable
{
void Draw(string s);
}
}