Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.09.2016, 14:04   #81
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

тут надо правильно разделять и формировать АПИ.

в ситуации полного сокрытия хранилища(БД, DNS, и тп).
естественно должен быть запрос с ключом.
GetItem и тп.

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


БД, скрывает от нас структуру хранения.(+ проверки прав и тп), итого нельзя давать доступ к структуре(он был бы быстрее)
а DNS и структуру и не дает доступа ко всем данным разом, итого нельзя давать доступ к структуре(+тут еще и доступ ReadOnly кстати)

если же вы дали доступ к массиву(причем полный), то дайте его нормально.
но, если у вас доступ условный(например четный отсюда, нечетные оттуда), тут не вопрос, или метод или обертка.

я к тому что не усложняйте код на ровном месте, оценивайте не только частности, но и общее.
ваши методы дают доступ к массиву, дают.
есть ли разница с прямым доступом? по результату нет, но есть по удобству.
я не просто так приводил класс Dictionary<,> в пример.
он дает и общий доступ, а так же и доступ к ключам и значениям отдельно.(но у него сокрытие хранилища, потому обертка).
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 15.09.2016 в 14:28.
Пепел Феникса вне форума Ответить с цитированием
Старый 15.09.2016, 14:07   #82
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

если что, то у меня в SharpDeveloper 5.1

код
Код:
namespace TestProperties
{
	class Program
	{
		static void Main(string[] args)
		{
			PropertiesTest testing=new PropertiesTest();
			testing.Data[5]=200; 
			
			for (int i=0;i<10;i++) Console.WriteLine("i= {0} val={1}", i, testing.Data[i]);
			
			Console.Write("Press any key to continue . . . ");
			Console.ReadKey(true);
		}
	}
	class PropertiesTest
	{
		public PropertiesTest()
		{
			dataPriv=new byte[10];
			for (int i=0;i<10;i++)
				dataPriv[i]=(byte)(i+1);
		}
		private byte[] dataPriv;
		public byte[] Data
		{
			/*set
			{
				Console.WriteLine("setter");
				dataPriv=value;
			} */
			get
			{
				Console.WriteLine("getter");
				return dataPriv;
			}
		}
	}
}
тоже компилируется и работает без set

этот код выдаёт такой результат:
Цитата:
Код:
getter
getter
i= 0 val=1
getter
i= 1 val=2
getter
i= 2 val=3
getter
i= 3 val=4
getter
i= 4 val=5
getter
i= 5 val=200
getter
i= 6 val=7
getter
i= 7 val=8
getter
i= 8 val=9
getter
i= 9 val=10
Press any key to continue . . .

я не знаю почему, но set, получается, не нужен!
более того, если код setter'а разкомментировать, то он не вызывается! (WriteLine("setter") не срабатывает).
Serge_Bliznykov вне форума Ответить с цитированием
Старый 15.09.2016, 14:10   #83
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
я не знаю почему, но set, получается, не нужен!
для того чтоб set был нужен, нужно присваивать значение самому свойству, а не объекту из свойства.(то есть менять массив целиком, например через myClass.Data=new byte[1]
тут можно массив заменить на любой другой объект, и дергать его методы и свойства.
Код:
testing.Data[5]=200;
такая запись должна быть равна
Код:
var data=testing.Data;
data[5]=200;
или же
Код:
(testing.Data)[5]=200;
в С# нет const объектов.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 15.09.2016 в 14:16.
Пепел Феникса вне форума Ответить с цитированием
Старый 15.09.2016, 22:08   #84
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Цитата:
Сообщение от Пепел Феникса
если же вы дали доступ к массиву(причем полный), то дайте его нормально.
В таком случае свойство не нужно как таковое, просто public массив. Это конечно в том случае, если не нужно организовывать дополнительную логику доступа.
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Старый 15.09.2016, 22:15   #85
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Лучше свойства, некоторые вещи не работают с полями. Атрибуты, биндинг WPF, ...
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 15.09.2016, 22:15   #86
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
public int[] Data{get;private set;}
с полем так нельзя.

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

еще сериализация часто их(поля) не берет в учет.

в общем, свойства это часть контракта/интерфейса
поля, часть реализации.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 15.09.2016 в 22:20.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Wordpress, как создавать отдельные рубрики для страниц? AlienNation WordPress и другие CMS 0 09.10.2012 11:42
Именованные таблицы DiemonStar Microsoft Office Excel 4 02.10.2012 18:02
Операции класса, индексаторы Rectangle 6666 Общие вопросы .NET 4 08.05.2012 11:31
Именованные ячейки Foxx Microsoft Office Excel 1 20.02.2012 00:33
Как в Delphi создавать и использовать скины для програм SeRhy Помощь студентам 3 20.12.2007 20:59