14. 확장 메소드
·
💻 Programming Language/C#
확장 메소드 : 기존 클래스의 기능을 확장하는 기법, 상속과 구별하여 생각하면 이해하기가 쉽다. 상속과 다르게 "기존클래스" 에 확장을 해줌으로써 본래 있던 기능처럼 사용할 수 있다. 주의)Java와 혼동하지 말것!!! Java는 extends라는 키워드를 이용해 상속을 받는데 Java에서는 상속에 확장의 개념이 포함된다. 하지만 C#에서는 상속과 확장 개념을 분리시킨다. ####확장 메소드 선언 형식 - static 키워드가 붙어야한다. public static class 클래스명 { public static 반환형식 메소드명( this 대상형식(클래스, 타입) 식별자, 매개변수) { } } 확장메소드 사용 예제 코드1 using System.Collections; namespace ExtansionE..
13. 튜플 리턴 타입을 이용한 메소드 사용하기
·
💻 Programming Language/C#
using System; namespace TupleEx2 { class Program { static void Main(string[] args) { // 튜플 리턴타입을 이용한 메소드 선언 (int count, int sum, double avg) getScore (List data) //튜플 리턴타입을 명시. { int count = 0, sum =0; double avg = 0; foreach (var item in data) { count++; sum += item; } avg = sum / count; return (count, sum, avg); } var data = new List {10, 11, 22, 33, 44}; var result = getScore (data); Console...
12. 구조체 & 튜플
·
💻 Programming Language/C#
구조체(Struct) => 키워드 : struct 사용 using System; namespace StructEx { //구조체 정의하기 struct MyPoint { public int x; public int y; //**구조체는 매개변수가 없는 기본생성자는 선언할 수 없다. public MyPoint(int x, int y) { this.x = x; this.y = y; } // 모든 구조체는 System.Object 형식을 상속하는 System.ValueType으로 부터 직접 상속받음. public override string ToString() { return string.Format($"{x} {y}"); } } class Program { static void Main(string[] arg..
11. 오버라이딩(virtual, override, new)
·
💻 Programming Language/C#
namespace Override { class BaseClass { public virtual void echo() { Console.WriteLine("기반 클래스"); } public virtual void echo2() { Console.WriteLine("기반 echo2"); } } class DerivedClass : BaseClass { override public void echo() //부모클래스 내에 virtual로 선언되어 있는 메소드를 파생클래스에서 재정의할때 // override 키워드를 앞에 붙이고 메소드를 재정의해준다. // => 이렇게 사용하는게 정확한 방법이고 에러나 경고가 안뜸 { Console.WriteLine("파생 클래스"); } public new void echo..
10. is 연산자와 as 연산자
·
💻 Programming Language/C#
namespace AsisEx { class Human { public void showInfo() { Console.WriteLine("Human"); } } class Programmer : Human { public void programming() { Console.WriteLine("개발자"); } } class Designer : Human { public void design() { Console.WriteLine("디자이너"); } } class Program { static void Main(string[] args) { Human human = new Programmer(); //파생클래스 인스턴스를 기반클래스 인스턴스로 선언 Programmer programmer; if (human ..
09. 상속관계의 클래스 형변환
·
💻 Programming Language/C#
namespace ClassConversionEx { // 상속관계의 클래스 사이에서의 형변환 class Human { public void showInfo() { Console.WriteLine("Human"); } } class Programmer : Human { public void programming() { Console.WriteLine("프로그래밍 하는 개발자"); } } class Designer : Human { public void design() { Console.WriteLine("디자인하는 디자이너"); } } class Program { static void Main(string[] args) { Human human = new Human(); human.showInfo(); ..
08. base키워드와 sealed한정자
·
💻 Programming Language/C#
namespace inheritEx2 { // 기반(부모) 클래스의 매개변수가 있는 생성자에게 // 파생(자식) 클래스의 생성자에서 인자를 전달하는 방법 /* C# 에서는 부모 클래스 생성자 중에서 사용자 지정 생성자(매개변수가 있는 생성자)가 존재 할 때 부모 클래스 생성자의 매개변수 (Ex. 매개변수 = p) 를 자식클래스에서 전달하여 활용할 수 있다. 즉, 자식 클래스의 인스턴스(부모클래스를 상속받고 있는경우)를 생성할때 부모클래스에 매개변수를 전달하여 초기화 할 수 있음. cf) Java? Python인가? 거기서 봤던 super() 같은 것인듯함. */ /* sealed */ class Parent // 이와 같이 `sealed` 키워드를 이용하면 // 컴파일러에서 에러를 발생시켜 상속을 불가능..