2017-02-26 1 views
0

System.Attribute에서 상속 한 매우 기본적인 클래스 라이브러리가 있습니다. 또한 DLL을 다른 프로그램에서 사용할 수 있도록 어셈블리로 서명했습니다.C# 외부 클래스 라이브러리의 특성

namespace BearData 
{ 
    public class BearData : Attribute 
    { 
    private string[] array1; 
    private string bear = "Bear"; 
    private int weight; 

    public BearData(string bear) 
    { 
     this.bear = bear; 
    } 
    public string Bear 
    { 
     get 
     { 
      return bear; 
     } 

     set 
     { 
      bear = value; 
     } 
    } 

    public int Weight 
    { 
     get 
     { 
      return weight; 
     } 

     set 
     { 
      weight = value; 
     } 
    } 

    public string[] BearTypes() 
    { 
     array1 = new string[8]; 
     array1[0] = "Brown/Grizzly"; 
     array1[1] = "Polar"; 
     array1[2] = "Asian Black"; 
     array1[3] = "American Black"; 
     array1[4] = "Sun"; 
     array1[5] = "Sloth"; 
     array1[6] = "Spectacled"; 
     array1[7] = "Giant Panda"; 

     return array1; 
    } 
    } 
} 

여기서는 기본 콘솔 응용 프로그램에 사용됩니다. 유형의

bearAttribute = (BearData.BearData)attrs[0]; 

"처리되지 않은 예외 ': 그러나 때문에 내 교수, 비밀 모호한, 그리고 수수께끼의 특성으로, 나는이 줄에서 오류가 일하러이 점점 여전히 독립에 있어요 System.IndexOutOfRangeException ' 가 Assigntment5_Console.exe에서 발생했습니다.'는 정확한 오류입니다.

그 특정 오류의 원인은 무엇입니까?

또한 일반적으로 외부 라이브러리에서 가져온 속성을 사용하는 것이 좋고/적절한 방법입니까? 여기에 무작위 배열이 던져졌고 속성 클래스에 배열을 캐스팅한다는 것이 이상하게 보입니다.

그건 그렇고. 이것은 교수님이 단일 Visual Studio 인스턴스에서 분리 된 속성 클래스의 코드를 작성한 방법입니다.() 메소드를 그는 또한 수출 클래스 라이브러리 DLL의 예를했고 나는 Program.Main에 2

using BearData; 
namespace Assigntment5_Console 
{ 
    class Program 
    { 

    [BearData.BearData("Bear", Weight = 1000)] 

    static void Main(string[] args) 
    { 
     MemberInfo attributeInfo; 
     attributeInfo = typeof(BearData.BearData); 
     object[] attrs = attributeInfo.GetCustomAttributes(false); 

     //for (int i = 0; i < attrs.Length; i++) 
     //{ 
     // Console.WriteLine(attrs[i]); 
     //} 
     BearData.BearData bearAttribute; 
     bearAttribute = (BearData.BearData)attrs[0]; 


     Console.WriteLine("Animal: " + bearAttribute.Bear + "\nAverage Weight: " + bearAttribute.Weight); 
     Console.ReadLine(); 
    } 


    } 
} 

답변

1

사용자가 정의한 BearData 속성을 결합하는 방법을 알아 내기 위해 내 자신의 장치에 남아 있었다 그래서 당신은 다음 코드는 확실히이 첫 번째 시도를 작동시킬 않은 문제

namespace Assigntment5_Console 
{ 
    class Program 
    { 
     [BearData.BearData("Bear", Weight = 1000)] 
     static void Main(string[] args) 
     { 
      MethodBase method = MethodBase.GetCurrentMethod(); 
      object[] attrs = method.GetCustomAttributes(typeof(BearData.BearData), true); 

      BearData.BearData bearAttribute; 
      bearAttribute = (BearData.BearData)attrs[0]; 

      Console.WriteLine("Animal: " + bearAttribute.Bear + "\nAverage Weight: " + bearAttribute.Weight); 
      Console.ReadLine(); 
     } 
    } 
} 
+1

을 수정해야이

속성을 찾고해야합니다. 고마워요! –

관련 문제