Используйте одно имя свойства с несколькими конструкторами, которые принимают разные типы - PullRequest
0 голосов
/ 24 апреля 2018

У меня есть класс, который имеет несколько конструкторов, таких как:

var Value; //Does not work

    public MyClass(int val, byte[] data)
    {
        //Assign Value 
    }

    public MyClass(short val, byte[] data)
    {
        //Assign Value 
    }

    public MyClass(bool val, byte[]data)
    {
        //Assign Value 
    }
    //......More down

Можно ли создать свойство с именем Value того же типа, что и параметры, передаваемые в конструкторы? Причина в том, что я передаю байт [], поступающий из потока TCP, и мне нужно знать тип, поэтому я знаю, какую функцию Bitconverter вызывать.

Альтернативой, о которой я думал, было сделать так, чтобы вызывающая сторона передавала перечисление с типом в конструкторе

1 Ответ

0 голосов
/ 24 апреля 2018

Имейте в виду, что var не означает универсальный или свободно напечатанный.Это просто синтаксический сахар, который выводит тип на основе значения, которое вы предоставляете.

Однако не все еще потеряно, в C # есть функция под названием generics , которая позволит вам определять тип при создании экземпляра класса, позволяя иметь один класс, который может обрабатывать несколько объектов "типы "в некотором роде.Использование обобщений должно дать вам желаемый результат.

Первое, что вам нужно сделать, это сделать ваш класс обобщенным:

public class MyClass<T>
{
    public MyClass(T initialValue)
    {
        Value = initialValue;
    }

    public T Value {get; set;}
}

Затем вы можете создавать экземпляры вашего класса следующим образом:

var myObj = new MyClass<bool>(true); // "myObj.Value" is a bool
var myObj2 = new MyClass<int>(13); // "myObj2.Value" is an int

Скрипка здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...