>  기사  >  类库下载  >  C# 속성 접근자

C# 속성 접근자

高洛峰
高洛峰원래의
2016-10-13 16:31:511505검색

속성의 접근자에는 속성을 가져오거나 설정하는 것과 관련된 실행 가능한 명령문이 포함되어 있습니다. 접근자 선언에는 get 접근자, set 접근자 또는 둘 다가 포함될 수 있습니다. 선언은 다음 형식 중 하나를 사용합니다.

get {}
set {}

get 접근자:
get 접근자 본문은 메서드 본문과 유사합니다. 속성 유형의 값을 반환해야 합니다. get 접근자를 실행하는 것은 필드 값을 읽는 것과 같습니다.

다음은 비공개 필드 이름의 값을 반환하는 get 접근자입니다.

private string name;  // the name field
 
public string Name  // the Name 
 
property
{    
   get
   {       
       return name;
   }
}

속성이 참조되면 속성이 참조되지 않는 한 속성을 읽기 위해 get 접근자가 호출됩니다. 가치의 대상.

예:

Employee e1 = new Employee();
 ...
 Console.Write(e1.Name); // The get accessor is invoked here

get 접근자는 return 또는 throw 문으로 종료되어야 하며 제어는 접근자 본문 이상으로 확장될 수 없습니다.



set 접근자:
set 접근자는 void를 반환하는 메서드와 유사합니다. value라는 암시적 매개변수를 사용하며, 이 매개변수의 유형은 속성의 유형입니다.

다음 예에서는 Set 접근자가 Name 속성에 추가됩니다.

public string Name
{  
   get
   {  
        return name;
   }  
     
   set
   {
       name = value;
   }
}

속성에 값이 할당되면 작업에서 set 접근자를 호출합니다.

예:

e1.Name = "Joe"; // The set accessor is invoked here

set 접근자에서 지역 변수 선언에 암시적 매개변수 이름(값)을 사용하는 것은 오류입니다.


참고:

속성은 사용된 접근자에 따라 다음과 같이 분류됩니다.
get 접근자 속성만 해당됩니다. 읽기 전용 속성이라고 합니다. 읽기 전용 속성에는 값을 할당할 수 없습니다.
set 접근자만 있는 속성을 쓰기 전용 속성이라고 합니다. 쓰기 전용 속성은 할당 대상을 제외하고 참조할 수 없습니다.
get 및 set 접근자가 모두 있는 속성은 읽기/쓰기 속성입니다.
속성 선언에서 get 및 set 접근자는 모두 속성 본문 내부에서 선언되어야 합니다.
객체의 상태를 변경하기 위해 get 접근자를 사용하는 것은 좋지 않은 프로그래밍 스타일입니다.


접속자가 무엇인지 이해하기 위해 다음 예를 사용합니다.

 using System; 
 namespace AccessorEG
 {     
     public class Student
     {         
         // 私有字段 private field
         private int _age; 
          
         // 公开的属性 public property
         public int Age
         {             
            get { return _age; }             
            set { _age = value; }
         }
     } 
      
     class Program
     {         
         static void Main(string[] args)
         {
             Student stu = new Student();
             stu.Age = 10;                           // 使用了修改
             Console.WriteLine(stu.Age.ToString()); //使用了读取 输出 10                  
             Console.ReadKey();                    
         }
     }
 }

접속자는 다음의 액세스를 의미한다는 것을 이해하기 쉽습니다. 인터페이스는 객체 유형 구성원과 외부 세계 간의 정보 교환을 가능하게 하는 브리지이며, 외부 세계는 객체 구성원을 읽고 쓰는 해당 작업을 수행할 수 있습니다.

그럼 어떤 회원이 접속자를 가질 수 있나요? 읽기 전용이 아닌 필드 및 이벤트에 대해 접근자를 선언할 수 있습니다. 물론 읽기 전용 도메인은 외부 세계에서 얻을 수 있는 인터페이스, 즉 get도 제공할 수 있지만 선언이나 생성자에서만 초기화할 수 있고 set 메서드를 지원하지 않습니다.

 using System; 
 namespace AccessorEG
 {     
     public class Student
     {         
         // 私有字段 private field
         private readonly int _age = 10; 
          
         // 公开的属性 public property
         public int Age
         {   
               get { return _age; }
         }
     } 
      
     class Program
     {        
         static void Main(string[] args)
         {
             Student stu = new Student();
             Console.WriteLine(stu.Age.ToString());  // 使用了读取   输出 10                
             Console.ReadKey();                              
         }
     }
 }

위 코드에서 읽기전용 필드의 값은 선언시 할당되어 있으며, public 속성에 해당하는 접근자에는 set 메소드를 제공할 수 없습니다. 그렇지 않으면 제공되지 않습니다. 컴파일되었지만 외부 세계에서 얻을 수 있습니다.

필드 접근자에 대해 이야기해야 합니다. 일반적인 접근자는 다음과 같습니다.

using System; 
 namespace AccessorEG
 {     
     public class Student
     {         
         #region 全访问权限         // 私有字段
         private int _age;        // 与_age对应的公开属性,包含了set和get方法
          
         public int Age
         {             
             get { return _age; }             
             set { _age = value; }
         } 
         // 如果您安装了.NET3.0,那么您可以使用自动属性,届时,上面的代码即可以下面的代替
      // 在VS.NET下输入 prop 连击两下Tab键,编译器会自动帮您生成自动属性
      // public int Age { get; set; }
         #endregion // 全访问权限
  
         #region 只读属性         
         private string _name; 
          
         public string Name
         {             
            get { return _name; }
         } 
         // 等同于
      // public string Name { private set; get; }
         #endregion
  
         #region 只写属性         
         private bool _sex; 
          
         public bool Sex
         {          
             set { _sex = value; }
         }         
         // 等同于
      // public bool Sex { set; private get; }
         #endregion
  
     } 
      
     class Program
     {         
         static void Main(string[] args)
         {
             Student stu = new Student();
             stu.Age = 18;             
             // stu.Name = "Johness"; 异常,编译错误,因为该属性只读
         // Console.WriteLine(stu.Sex.ToString()); 异常,编译错误,因为该属性只写
             Console.WriteLine(stu.Age.ToString());  // 使用了读取                    Console.ReadKey();             // 输出 18         
         }
     }
 }

위 예의 읽기 전용 및 쓰기 전용은 외부 세계에만 유효합니다. 접근자의 소유자를 지정하는 경우 클래스의 전용 필드를 표시합니다. 그런 다음 클래스 내에서 읽기 및 쓰기 작업을 위해 정의한 비공개 필드를 편리하게 사용할 수 있습니다. 따라서 친구는 3.0의 새로운 구문(자동 속성) 대신 .NET2.0의 구문을 사용하여 필드와 해당 접근자를 정의하는 것이 좋습니다. ). 물론 접근자를 사용하여 데이터 유효성을 더 잘 확인할 수도 있습니다:

using System; 
 namespace AccessorEG
 {     
     public class Student
     {         
         // 私有字段
         private int _age;  // 与_age对应的公开属性,包含了set和get方法
          
         public int Age
         {             
             get { return _age; } // 利用访问器对输入的年龄进行验证
         // 如果输入值小于0或者大于100
         // 可以赋为默认值18或者不进行操作
             set 
             {                 
                   if (value >= 0 && value <= 100)
                    _age = value;   // 如果数据无效不进行操作可以注释以下内容
                   else
                    _age = 18;
             }
         }
  
     } 
      
     class Program
     {         
         static void Main(string[] args)
         {
             Student stu = new Student();
             stu.Age = -2;   // 赋无效值                     
             Console.WriteLine(stu.Age.ToString()); 
             Console.ReadKey();    // 输出 18         
         }
     }
 }


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