>백엔드 개발 >C#.Net 튜토리얼 >C# 기초지식 편찬: 기초지식(3) 클래스 구조

C# 기초지식 편찬: 기초지식(3) 클래스 구조

黄舟
黄舟원래의
2017-02-10 15:38:451234검색

객체를 인스턴스화할 때 YSchool 및 YTeacher 클래스를 정의했습니다.

            YSchool shool1 = new YSchool();

            shool1.ID = 1;

            shool1.Name = "清华附中";

            YSchool school2 = new YSchool();

            school2.ID = 2;

            school2.Name = "北师大附中";

이것이 맞습니까? 실제로 객체가 인스턴스화될 때 해당 속성은 다음과 같아야 하기 때문에 논리적으로 올바르지 않습니다. 나중에 속성을 추가하는 대신 인스턴스화할 때 거기에 있습니다. 프로그램의 성능은 속성이 초기값을 가져야 한다는 것입니다.
그래서 클래스에 그러한 메소드가 있어야 하며 반환 유형이 없고 메소드 이름이 클래스 이름과 동일하며 매개변수 클래스 목록이 있거나 매개변수 목록이 없어야 합니다. 일반적으로 "생성자"또는 "생성자"로 알려진 구축 방법입니다. 클래스에는 하나 이상의 생성자가 있을 수 있습니다. 물론 생성자를 작성하지 않는다고 해서 클래스에 여전히 기본 생성자가 있다는 의미는 아닙니다. 여러 생성자를 사용하는 경우 해당 매개변수 목록은 달라야 합니다.
다음은 이 수업을 개선하기 위해 YSchool을 예로 사용합니다.

  /// <summary>
    /// YSchool类的id和name是它的固有属性,它的值应该是确定的。
    /// 实例化的同时对属性赋初值,用到构造函数。
    /// </summary>
    public class YSchool
    {
        private int id = 0;

        private string name = string.Empty;

        public int ID
        {
            get
            {
                return this.id;
            }
        }

        public string Name
        {
            get
            {
                return name;
            }
        }
        /// <summary>
        /// 没有参数的构造器称之为“默认构造器”;如果没有写一个构造器,那么
        ///系统也会提供一个默认的构造器,所以说类至少有一个构造器;
        ///当然,如果系统提供的默认构造函数,则属性初值为声明时赋的初值,如果声明
        ///未赋初值,则是“类型默认值”,比如0或者null。
        /// </summary>
        public YSchool()
        {
            this.id = 0;

            this.name = @"清华附中";
        }
        /// <summary>
        /// 带有参数列表的构造函数,
        /// 属性的值就是传入的列表的值。
        /// </summary>
        /// <param name="id"></param>
        /// <param name="name"></param>
        public  YSchool(int id, string name)
        {
            this.id = id;

            this.name = name;
        }
        public  YSchool(int id)
        {
            this.id = id;

            this.name = @"陕科大附中";
        }
    }
   class Program
    {
        static void Main(string[] args)
        {
            YSchool shool1 = new YSchool();

            YSchool school2 = new YSchool(1, @"西工大附中");

            YSchool school3 = new YSchool(2);

            Console.ReadKey();
        }
    }

id, name의 get/set 속성도 get only로 수정되었습니다. 이러한 속성 값은 고유 속성이므로 인스턴스화 후에 값을 할당하는 것은 논리적이지 않습니다. 즉, 이러한 속성은 읽기 전용입니다.

기본값은 코드에 언급되어 있는데 여기서는 간단히 살펴보겠습니다. 필드를 선언할 때 할당 연산자 "="를 사용하여

    string name = string.Empty;

와 같이 필드에 값을 직접 추가할 수 있습니다. 이는 변수에 값을 할당하는 것이 아닙니다. 기본값은 단순한 형식입니다. 변수의 실제 할당은 여전히 ​​생성자 중간에 있습니다. 일반적으로 표준화된 코드에서는 변수를 선언할 때 변수에 초기값을 할당해야 합니다. 수명 동안 할당된 필드가 없으면 컴파일러는 해당 필드를 설정된 기본값에 할당하는 할당 코드를 추가합니다. 실제로 필드에 기본값을 추가하든지 필드에는 기본값이 있지만, 인위적으로 기본값을 추가하지 않으면 필드의 기본값은 0 또는 null이 됩니다.
여기서 또 한 가지 주의할 점은 앞서 시스템 기본 생성자를 언급했지만, 생성자를 정의하면 시스템 기본 생성자가 존재하지 않는다는 점이다. 따라서 기본 생성자와 매개변수가 있는 생성자를 모두 사용하는 경우에는 기본 생성자를 수동으로 정의해야 합니다. 예를 들어

        public YSchool()
        {

        }

또는

        public YSchool()
        {
            this.id = 0;

            this.name = @"尚进";
        }

요약하면 클래스를 인스턴스화하기 위한 정식 표현식은 다음과 같습니다. 클래스 이름 인스턴스 이름 = 새 클래스 이름(생성자 매개변수 목록); >위는 C# 기초 지식을 정리한 것입니다: 기초 지식 (3) 클래스 구조 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!

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