'MyClass'인스턴스를 XML 파일로 한 번에 하나씩 직렬화하려고합니다. 각 인스턴스에는 'ID'라는 int 속성이 있습니다. 대상 파일에는 이미 동일한 유형의 항목이 있으며 그 다음에 새 항목을 추가합니다. 삽입 할 인스턴스의 ID 값을 XML의 가장 큰 기존 항목보다 1 높게 설정합니다.C# 상속 된 필드 값이 기본 클래스와 섞여 필드 값
나는 다음과 같은 제네릭 클래스가 있습니다
public class ContentDataManager<T> where T : MyBaseClass
{
private static string _contentLocation = "Content/Data/";
private const string DEFAULT_FILEPATH = "data.xml";
public static int GetNextId(string filepath = DEFAULT_FILEPATH)
{
var allData = DeserializeAll(filepath);
int largestId = 0;
foreach (T data in allData)
{
if (data.ID > largestId)
{
largestId = data.ID;
}
}
return largestId + 1;
}
//...
}
이 같은이 클래스를 사용하고을 :
public class MyClass : MyBaseClass
{
public string Name;
public float Size;
public new int ID;
public static MyClass CreateNew(string name, float size)
{
MyClass newClass = new MyClass();
newClass.Name = name;
newClass.Size = size;
newClass.ID = ContentDataManager<MyClass>.GetNextId(DefaultFilepath);
return newClass;
}
MyBaseClass은 다음과 같습니다
이public abstract class MyBaseClass
{
//...
[ContentSerializerIgnore]
public int ID = 0;
}
문제는, ContentDataManager.GetNextId (...) 메소드의 foreach 루프에는 실제로 작동하지 않는 if 문이 있습니다. pr 오케이. 디버깅 할 때 '데이터'와 '데이터'라는 두 개의 시계를 추가했습니다. 재미있는 부분이 있습니다 : '데이터'의 시계는 ID 속성의 값이 1임을 보여줍니다. '데이터 .ID '속성은 0 값을 표시합니다.
나는이 오류가 상속과 관련되어 있음을 확신합니다. 이 오류가 발생하지 않도록 코드를 어떻게 변경해야합니까? 당신은 잘 할 것 파생 클래스에서 별도의 ID,베이스 하나에 대한 필요가 없습니다 보여 어떤에서
public new int ID;
:
왜'new' 연산자를 사용하여 MyClass에서'MyBaseClass'의'ID '를 숨기고 있습니까? 이 변수는 공개되어 있으며 MyClass에 의해 상속됩니다. –