Форум

Data.BG Форуми: C# как да предефинирам скаларен тип? - Data.BG Форуми

Прехвърляне към съдържание

Страница 1 от 1
  • Вие не можете да започнете нова тема
  • Вие не може да отговаряте на тази тема

C# как да предефинирам скаларен тип?

#1
Потребителят е неактивен   abramabra 

  • Група: Потребители
  • Мнения: 532
  • Регистриран: 28-June 06
  • Репутация: 12
C# как да предефинирам скаларен тип?
Ще опиша проблема с пример:
В малко проектче имам буфер за приемане на данни.
Размерът на буфера в момента в 200 байта и константата, с която е зададен е от тип байт.
Ако намправя размера 1000 байта ще сменя типа на UInt16, а ако го направя 100000 - на UInt32.
Обаче заедно с типа на константата трябва да сменя типовете на няколко формални параметъра в разни функции.

Много удобно ще бъде да дефинирам свой тип, а всичко, което е свързано с размера на буфера да обявя че е от този тип.

Ако беше н а Паскал, щях да декларирам
type
Type_Buf_Index = integer;
Ako беше C щеше да е typedef
Как се прави на C# ?

Мнението беше редактирано от abramabra: 28.05.15 - 23:38

0

#2
Потребителят е неактивен   pbmarkov 

  • Група: Потребители
  • Мнения: 779
  • Регистриран: 23-May 06
  • Репутация: 78
  • Пол:Мъж
  • Град:Варна
http://arbel.net/200...dden-c-typedef/
0

#3
Потребителят е неактивен   nikb 

  • Група: Потребители
  • Мнения: 2947
  • Регистриран: 12-March 05
  • Репутация: 192

Преглед на мнениеpbmarkov, на 29.05.15 - 08:42, каза:



Не решава въпроса - използва се за клас, структура и интерфейси, не за скаларни типове :(.

Опитах и
http://stackoverflow...tion-in-c-sharp
но не позволява константи :), като това:
НЕ СТАВА:
public struct DefBufSize { public UInt16 Value; }
private const DefBufSize PROT_BUF_MAX_SIZE = (DefBufSize)400;

DefBufSize' cannot be declared const

Мнението беше редактирано от nikb: 29.05.15 - 10:07

0

#4
Потребителят е неактивен   sharo 

  • Група: Потребители
  • Мнения: 2886
  • Регистриран: 06-April 03
  • Репутация: 397
  • Пол:Мъж
  • Град:София
С alias не става ли? Иначе пробвай private static readonly DefBufSize.....
0

#5
Потребителят е неактивен   alexvx 

  • Група: Потребители
  • Мнения: 60
  • Регистриран: 17-November 04
  • Репутация: 0
Може да стане с alias, но е безсмислено. В C# array индексите са от тип Int32, така че просто декларирай всички променливи свързани с размера на буфера като Int32. Няма да спестиш много памет като ги декларираш като по-малък тип, защото тогава просто ще се cast-ват към Int32 в runtime :)
0

#6
Потребителят е неактивен   abramabra 

  • Група: Потребители
  • Мнения: 532
  • Регистриран: 28-June 06
  • Репутация: 12

Преглед на мнениеalexvx, на 29.05.15 - 11:27, каза:

...Няма да спестиш много памет като ги декларираш като по-малък тип, защото тогава просто ще се cast-ват към Int32 в runtime :)

По-важен е формалния контрол - ентусиазирах се по тая тема, защото вчера не бях видял едно предупреждение и вместо една променлива ползвах друга за индекс, а ако е от специалния тип, компилаторът ще проверява по-строго.
Не, че не мога да допусна каква и да е грешка :).
0

#7
Потребителят е неактивен   pbmarkov 

  • Група: Потребители
  • Мнения: 779
  • Регистриран: 23-May 06
  • Репутация: 78
  • Пол:Мъж
  • Град:Варна
using myInt = System.Int32;

Това работи. В .NET няма "скаларни" типове.
0

#8
Потребителят е неактивен   abramabra 

  • Група: Потребители
  • Мнения: 532
  • Регистриран: 28-June 06
  • Репутация: 12

Преглед на мнениеpbmarkov, на 29.05.15 - 21:36, каза:

using myInt = System.Int32;

Това работи. В .NET няма "скаларни" типове.


Благодаря :), но моля те, дай един пример, за деклариране на константа от този тип, нещо като:
using myInt = System.Int32;
const myInt x = 5;

Мнението беше редактирано от abramabra: 29.05.15 - 21:47

0

#9
Потребителят е неактивен   pbmarkov 

  • Група: Потребители
  • Мнения: 779
  • Регистриран: 23-May 06
  • Репутация: 78
  • Пол:Мъж
  • Град:Варна
using myInt = System.Int32;

class Program
{
   const myInt x = 5;
   
   static void Main()
   {
       Console.WriteLine(x);
   }
}

Това естествено е само за компилатора. Не мисля, че се възприема като отделен тип.
0

#10
Потребителят е неактивен   abramabra 

  • Група: Потребители
  • Мнения: 532
  • Регистриран: 28-June 06
  • Репутация: 12

Преглед на мнениеpbmarkov, на 30.05.15 - 07:58, каза:

Това естествено е само за компилатора. Не мисля, че се възприема като отделен тип.

Да, но върши работа - oсигурява формалния контрол. БЛАГОДАРЯ!
0

Споделете тази тема чрез:


Страница 1 от 1
  • Вие не можете да започнете нова тема
  • Вие не може да отговаряте на тази тема

1 потребители четат тази тема
0 регистрирани потребители, 1 гости и 0 анонимни потребители


Data.BG e форум за дискусии. Data.BG не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Data.BG.

Close  Member Login