CTO (CTO :)는 기본 클래스에서 하나의 함수를 작성할 수있는 방법을 생각해 냈습니다. 자식 클래스. 여기에 내가 무엇을 최대 온 것입니다 - 파일부모 클래스의 함수를 통해 하위 클래스 속성에 액세스
기본 클래스
class Assets
{
public Assets getPropertyVal(Assets asObj)
{
PropertyInfo[] propInfos = asObj.GetType().GetProperties();
string strAttributeValue = "10";
foreach (PropertyInfo propInfo in propInfos)
{
// Getting the value
var propValue = propInfo.GetValue(asObj, null);
// Setting the value
propInfo.SetValue(asObj, Convert.ChangeType(strAttributeValue, propInfo.PropertyType), null);
}
return asObj;
}
}
하위 클래스
class House : Assets
{
public int rooms{get; set;}
}
Program.cs
class Program
{
static void Main(string[] args)
{
House hsObj = new House();
hsObj.rooms = 5;
Assets asObj = hsObj.getPropertyVal(hsObj);
// Returns asObj as JSON
}
}
이제 제대로 작동하지만 C#에서이 작업을 수행하는 더 좋은 방법이 있는지 궁금합니다.
우리는 하위 클래스에 어떤 속성이 있는지 알지 못하므로 런타임에 결정해야합니다. 반사를 사용하지 않고 자식 클래스의 속성 중 하나에 액세스 할 수있는 더 좋은 방법이 있다면 분명히, 나는 그냥 궁금 만들기 :
UPDATE. 중요한 점은 자식 클래스가 가질 수있는 속성이 무엇인지 알지 못한다는 것입니다.
업데이트 # 2 : 많은 엔티티가있는 제품으로 작업하고 있습니다. 이 엔티티는 다른 속성을가집니다. 한 곳에서 모든 속성에 액세스하고 작업 할 수 있기를 원합니다. 이 함수는 정확히 같습니다. 모든 데이터에 액세스 할 수있는 단일 장소입니다.
예제에서 개체를 만들고 개체의 모든 속성을 가져온 다음 개체에서 동일한 속성을 설정합니다. 다음과 같이 보입니다 :'var propValue = asObj.rooms; asObj.rooms = (int) propValue;'. 정확히 무엇을 원하니? 하위 클래스의 모든 속성을 기본 클래스로 복사 하시겠습니까? –
@VyacheslavVolkov, 리플렉션을 사용하지 않고 하위 클래스 속성에 액세스하는 더 좋은 방법이 있는지 궁금합니다. –
나는 이것의 목적을 이해하지 못한다. 귀하의 예제에서 당신은'Console.WriteLine (hsObj.rooms); '로 자식 속성 이름을 하드 코딩하고 있습니다. 당신은'hsObj = (House) hsObj.getPropertyVal (hsObj);'줄을 제거 할 수 있습니다. 반사가 완전히 낭비됩니다. 당신이 성취하고자하는 것에 대한 더 나은 예를 생각해 낼 수 있습니까? – Dan