Member 12277263 Ответов: 1

Как использовать свойства базового класса


Я не знаю, где я делаю ошибку, я пробовал много раз, но что-то не так с этим кодом, в методе обновлений я получаю id, версию и заданные значения, эти свойства находятся в классе logodetails, и я использую logodetails в качестве базового класса для деталей изображения. когда я использую класс ImageDetails в другом месте проекта, я получаю значения 0 ; (id = 0, version =0, set = 0)

public void Updates(AUnit _aUnit, int Id)
{
    ImageDetails _details = new ImageDetails(_aUnit, Id);
    List<LogoDetails> logolist = new List<LogoDetails>(); 
    LogoDetails logoDetails = new LogoDetails();

    int count = (int) _aUnit.ReadBits(8);
    for (int i = 0; i < (int) count; i++)
    {
        logoDetails.ID = 15;(int) _aUnit.ReadBits(8);
        logoDetails.Version = 6; (int) _aUnit.ReadBits(8);
        logoDetails.set = 14; (int) _aUnit.ReadBits(24);
        logolist.Add(logoDetails);
    }
    foreach (LogoDetails listitem in logolist)
    {
        _details.Rset = _aUnit.Buffer.Skip(10).Take(_details.set).ToArray();
    }
}

public class ImageDetails :LogoDetails
{
    public ImageDetails(AUnit _au, int carouselId)
    {            
        carId = carouselId;
        _AUnit = _au;         

        _updateTime = "";
    }
    private string _updateTime;

    public string UpdateTime
    {
        get { return _updateTime; }
        set { _updateTime = value; }
    }
}

public class LogoDetails
{
    public int LogoID { get; set; }
    public int LogoVersion { get; set; }
    public int Offset { get; set; }
}


Что я уже пробовал:

Я попробовал использовать тот же класс, но вместо базового класса он работал следующим образом

F-ES Sitecore

Классы - это экземпляры типов, поэтому, когда вы создаете класс в своем методе Updates, любые свойства, которые вы устанавливаете для этого объекта, применяются только к этому объекту. Если вы создадите новый экземпляр того же класса в другом месте, он будет иметь значения по умолчанию. Как упоминалось в решении 1, вы создаете классы, но ничего не делаете с ними, они просто исчезают, когда заканчивается ваш метод Updates. Вы можете запутаться между обычными и статическими свойствами. Когда вы определяете что-то как статическое, тогда это «глобальное» свойство из-за отсутствия лучшей фразы, и если вы установите это статическое свойство в методе, то все, что обращается к этому статическому свойству, увидит обновление. Хотя вряд ли вы этого хотите.

1 Ответов

Рейтинг:
2

Richard MacCutchan

public void Updates(AUnit _aUnit, int Id)
{
    ImageDetails _details = new ImageDetails(_aUnit, Id);  // new object
    List<LogoDetails> logolist = new List<LogoDetails>();  // new object
    LogoDetails logoDetails = new LogoDetails();           // new object
 
    int count = (int) _aUnit.ReadBits(8);
    for (int i = 0; i < (int) count; i++)
    {
        logoDetails.ID = 15;(int) _aUnit.ReadBits(8);
        logoDetails.Version = 6; (int) _aUnit.ReadBits(8);
        logoDetails.set = 14; (int) _aUnit.ReadBits(24);
        logolist.Add(logoDetails);
    }
    foreach (LogoDetails listitem in logolist)
    {
        _details.Rset = _aUnit.Buffer.Skip(10).Take(_details.set).ToArray();
    }
}

Вы создаете три новых объекта внутри этого метода, но нигде их не сохраняете. Поэтому, как только метод заканчивается, объекты выходят из области видимости, и они, как и их содержимое, больше никогда не видны.