>  기사  >  백엔드 개발  >  C# 기본 지식 편집: C# 클래스 및 구조(2)

C# 기본 지식 편집: C# 클래스 및 구조(2)

黄舟
黄舟원래의
2017-02-10 15:23:461210검색

 1. 생성자란 무엇인가요? 어떤 생성자가 있나요? 각 생성자의 정의, 구현방법, 주의사항은 무엇인가요?
소위 생성자라는 것은 객체를 초기화할 수 있는 메소드입니다. 즉, 이 함수를 실행한 후 메모리는 항상 이 클래스의 객체를 위한 공간을 열어줍니다. 세 가지 유형이 있습니다: 일반 생성자, 즉 인스턴스 생성자, 정적 생성자.
인스턴스화 생성자:

    public class Example
    {
        private string property1 = string.Empty;

        private string property2 = @"hello";

        private int property3 = 0;

        public Example()//成员都是声明时的初始值,这种默认的构造器,也可以不写。
        {

        }

        public Example(string p1, string p2, int p3)//传入的值初始化
        {
            this.property1 = p1;

            this.property2 = p2;

            this.property3 = p3;
        }
    }

개인 생성자:
개인 생성자, 외부에서 접근할 수 없으므로 인스턴스화하는 방법은 개인 생성자를 사용하는 싱글톤 모드를 참조하세요. :

http://www.php.cn/

정적 생성자:
먼저 예제를 살펴보세요:

 public class StaticConstruct
    {
        static StaticConstruct()
        {
            Console.WriteLine(@"静态构造函数");
        }

        public StaticConstruct()
        {
            Console.WriteLine(@"实例化构造函数");
        }

        public StaticConstruct(string flage)
        {
            Console.WriteLine(@"带参构造函数");
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            StaticConstruct strc = new StaticConstruct();

            StaticConstruct strcValue = new StaticConstruct(string.Empty);

            Console.ReadLine();
        }
    }

결과:

정적 생성자의 특징: 정적 생성자에서는 액세스 한정자가 허용되지 않습니다. 정적 생성자는 자동으로 먼저 호출됩니다. 즉, 정적 생성자 호출은 제어할 수 없으며 클래스에는 하나만 있습니다. ; 상속될 수 없습니다.
2. This 키워드와 Base 키워드의 용도는 무엇인가요? 코드를 구현하시겠습니까?
(1) 이 키워드 :
이름에서 알 수 있듯이 이 클래스에 담긴 의미를 나타내며 현재 클래스의 구성원을 지칭합니다. 물론, 프로그램이 실행 중이라면 이는 현재 클래스의 객체의 멤버를 참조하며 객체를 구별하는 기능을 한다고 정확하게 말할 수 있다. 클래스는 N개의 객체를 가질 수 있기 때문입니다. 그러나 static 클래스에서는 this 키워드를 사용할 수 없습니다. 그 이유는 static이 여러 객체를 인스턴스화하는 것이 불가능하기 때문입니다. 당연히 객체를 구별하기 위해 이것을 사용할 필요가 없습니다. 일반적으로 사용되는 것은 다음과 같습니다.
a. 메소드나 생성자에서 동일한 이름을 갖는 변수.

     public class MyTestA
    {
        private string testA = string.Empty;

        public MyTestA(string testA)
        {
            this.testA = testA;
        }

        public void Handler(string testA)
        {
            this.testA = testA;
        }
    }

b. get, 메소드 설정

    public class MyTestB
    {
        private string testB = string.Empty;

        public string TestB
        {
            get 
            { 
                return this.testB;
            }
            set 
            { 
                this.testB = value;
            }
        }
    }

c. 인스턴스 전달
예를 들어

    public class MyTestC
    {
        public event EventHandler OnTestCEvent = null;

        private void Send_OntestEvent(object sender,EventArgs e)
        {
            if (OnTestCEvent != null)
            {
                OnTestCEvent(sender, e);
            }
        }

        private void TestEvent()
        {
            Send_OntestEvent(this, null);
        }
    }

    public class MyTestD
    {
        MyTestC testC = new MyTestC();

        public event EventHandler OnTestDEvent = null;

        private void Send_OnTestDEvent(object sender, EventArgs e)
        {
            if (OnTestDEvent != null)
            {
                OnTestDEvent(sender, e);
            }
        }

        public MyTestD()
        {
            testC.OnTestCEvent += new EventHandler(testC_OnTestEvent);
        }

        void testC_OnTestEvent(object sender, EventArgs e)
        {
            Send_OnTestDEvent(sender, e);
        }
    }

    public class MyTestE
    {
        MyTestD testD = new MyTestD();

        public MyTestE()
        {
            this.testD.OnTestDEvent += new EventHandler(testD_OnTestDEvent);
        }

        void testD_OnTestDEvent(object sender, EventArgs e)
        {
            MyTestC testC = sender as MyTestC;//通过MytestD将对象转了过来

            if (testC != null)
            {
                //代码
            }
        }
    }

이벤트에서 기본 키워드는
입니다. 일반 하위 클래스가 상위 클래스에 액세스하는 데 사용됩니다.
하나는 부모 클래스 메서드를 재정의할 때

    public class ParentClass
    {
        public virtual void MethodA()
        {
            Console.WriteLine(@"基类的方法");
        }
    }

    public class ChildClass : ParentClass
    {
        public override void MethodA()
        {
            base.MethodA();

            Console.WriteLine("派生类方法");
        }
    }

다른 하나는 하위 클래스가 부모 클래스 생성자

    public class ParentClass
    {
        public ParentClass(string flage)
        {
            Console.WriteLine(@"基类构造函数");
        }

        public virtual void MethodA()
        {
            Console.WriteLine(@"基类的方法");
        }
    }

    public class ChildClass : ParentClass
    {
        public ChildClass(string flage)

            : base(flage)
        {

        }

        public override void MethodA()
        {
            base.MethodA();

            Console.WriteLine("派生类方法");
        }
    }

 를 호출하는 것입니다. 3. 리플렉션이란 무엇인가요? 반사를 구현하는 방법은 무엇입니까? 반사의 장점과 단점은 무엇입니까? 언제 리플렉션을 사용하나요?
http://blog.csdn.net/yysyangyangyangshan/article/details/7028589

위 내용은 C#의 기본 지식입니다. C# 클래스 및 구조(2) 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.