2016-07-26 4 views
-1

давайте предположим, что у меня есть класс, как показано ниже:метод расширения для преобразования

public class PhysicalMemory 
{ 
    public string Localtion { get; internal set; } 
    public ulong Capacity { get; internal set; } 
    public string Manufacturer { get; internal set; } 
    public string Part_Number { get; internal set; } 
    public string Serial_Number { get; internal set; } 
    public uint Speed { get; internal set; } 
} 

мне нужна метод расширения для преобразования моего Capacity из байт в кбайт, мегабайты и ..... если пользователь хочет, для пример:

PhysicalMemory phM = New PhysicalMemory(); 
ulong capacity_in_bytes = phM.Capacity; 

ulong capacity_in_KB = phM.Capacity.ToKBytes(); 
ulong capacity_in_MB = phM.Capacity.ToMBytes(); 
+2

Помогла ли это решить вашу проблему? –

+0

Пожалуйста, не оставляйте сообщение без присмотра. Не забудьте отметить ответ в зависимости от того, кто вас убедил или решит вашу проблему. Говоря это конкретно, потому что вы новичок здесь. – niksofteng

ответ

2
public static class ULongExtensions 
{ 
    public static ulong ToKBytes(this ulong memory) 
    { 
     return memory/1024; 
    } 

    public static ulong ToMByptes(this ulong memory) 
    { 
     return memory.ToKBytes()/1024; 
    } 
}  
+0

Спасибо @fubo :) Немного баланса сегодня утром :) –

0

Если вы создали класс PhysicalMemory нет никакого смысла в создании методов расширения. Они используются для расширения классов, которые вы не можете изменить (по той или иной причине).

Также нет смысла хранить значения МБ в ulong. Таким образом, вы не различаете между 2.1 MB и 2.2 MB. Я не думаю, что такое поведение, сделать это лучше пойти с decimal или double

Однако, вы можете сделать это следующим образом:

public static class MyExtensions 
{ 
    public static decimal ToKBytes(this ulong value) 
    { 
     return value/(decimal)1024; 
    } 

    public static decimal ToMBytes(this ulong value) 
    { 
     return value/((decimal)1024 * 1024); 
    } 
} 

я настоятельно рекомендую не продлевать ulong типа с эти методы. Для меня это не имеет никакого смысла. Либо создайте модуль преобразования, либо добавьте методы в свой класс (возможно, как свойства)

3

Для этой цели нет смысла использовать методы расширения. Даже если можно написать метод расширения, как показано другими здесь, вам действительно нужно избегать этого. Если вы напишете один, это будет просто метод, который преобразует X ulong в Y ulong.

Здесь вы можете просто добавить соответствующие свойства или методы для преобразования емкости. Я бы предпочел просто иметь только свойства readonly. И это даже проще, чем иметь отдельные методы расширения.

public class PhysicalMemory 
{ 
    public ulong Capacity { get; internal set; } 
    public ulong CapacityMB { get { return Capacity/(1024 * 1024); } } 
    public ulong CapacityKB { get { return Capacity/1024; } } 
} 
+0

Интересный способ :) не думал об этом –

Смежные вопросы