none
Использований открытых полей и безопасность RRS feed

  • Общие обсуждения

  •  изначальная закрытость гарантирует от случайного непредумышленного доступа к внутреннему состоянию нашего объекта.

    это разве возможно? Вы имеете ввиду случайного непредумышленного = ошибка разработчика?

    Просто есть например серьёзные приложения как например AdobePhotoshop которого крякают, это не из-за открытых полей где то там в каких то классах?

    • Разделено YatajgaEditor 26 сентября 2013 г. 19:50
    24 сентября 2013 г. 18:14

Все ответы

  • это разве возможно? Вы имеете ввиду случайного непредумышленного = ошибка разработчика?

    Да, именно это. К тому же интеллисенс не будет показывать закрытые члены.

    Просто есть например серьёзные приложения как например AdobePhotoshop которого крякают, это не из-за открытых полей где то там в каких то классах?

    Это вряд ли.
    24 сентября 2013 г. 20:07
  • представьте такую ситуацию

    public class test
    {
    private string ss;
    public test(string s)
    {
    ss = s;
    }
    }
    public class test
    {
    public string ss {get;set;}
    public test()
    {
    
    }
    }
    так что лучше использовать для чернового варианта класса?

     

    24 сентября 2013 г. 20:15
  • так что лучше использовать для чернового варианта класса? 

    Я не могу дать однозначный ответ. Эти классы можно использовать по-разному. В первом случае ss мы задаём значение один раз при создании класса, и изменить не можем. Во втором случае можем задать (а можем и не задать вовсе) в любой момент, и можем прочитать значение даже не заданное.

    Если нужен конкретный совет, то обрисуйте проблему своими словами.

    24 сентября 2013 г. 20:35
  • У меня есть наработка одного приложения. Всё что он делает это подсчёт, просто математические уравнения.

    Так как используются куча свойств, причём открытых, их очень много, и волнует вопрос не приведёт ли это к плохим последствиям, не хотелось бы в конце пути переделывать все, когда окажется что нужны закрытые члены.

    вот пример одного типа

     public class FloorTile:AOE
        { 
            public string name { get; set; }
            public double width { get; set; }
            public double thick { get; set; }
            public float weight { get; set; }
            public string[] colorDefinitions { get; set; }
            public int cost { get; set; }
            public byte PiecesPerBox { get; set; }
            public System.Drawing.Image Thumbnail { get; set; }
            public FloorTile(string NameOfTile, double WidthOfTile, double ThinknessOfTile, float WeightOfTile, string[] ColorDefinitionsOfTile, int CostOfTile, byte PiecesPer1BoxOfTile)
            {
                name = NameOfTile;
                width = WidthOfTile;
                thick = ThinknessOfTile;
                weight = WeightOfTile;
                colorDefinitions = ColorDefinitionsOfTile;
                cost = CostOfTile;
                PiecesPerBox = PiecesPer1BoxOfTile;
            }
            public FloorTile()
            { 
                
            }
            public FloorTile(TileSizes TileSizeEnum)
            {
                width = TileSizeEnum.width;
                name = "not defined";
                thick = 0.006;
                weight = 0.7f;
                colorDefinitions = new string[] { "just", "for", "testing", "Purpose" };
                cost = 0;
                PiecesPerBox = 0;         
            }
            public double GetArea()
            {
                return width * width;
            }
            public double GetCostPerPiece()
            {
                return cost * GetArea();
            }
        }
    как видно он весь состоит из открытых полей. Таких объектов не мало. И наверное придётся использовать IDispose?

    26 сентября 2013 г. 20:43
  • Добрый день, коллега.

    Вы путаете кислое с холодным. Никто не делает защиту программ от взлома на основе закрытых полей. Не верите? Вот описание в MSDN метода, который позволяет обращаться к закрытым членам класса. Модификаторы доступа нужны для того, чтобы облегчить жизнь вам, как разработчику. Вот, например, посмотрите первую часть статьи здесь. Видите зачем нужна открытая и закрытая часть? Если прямой доступ к некому члену класса может нарушить работу, то этот член должен быть спрятан в закрытую часть, и к нему должен быть предоставлен безопасный открытый доступ. Этот механиз называется инкапсуляция и призван уберечь вас от непреднамеренных логических ошибок в коде и неправильных действий тех, кто будет использовать ваш класс. Под использующими ваш класс я подразумеваю как других разработчиков, так и пользователей программ с этим классом.

    27 сентября 2013 г. 5:48
    Отвечающий