Другие языки программирования и технологии
C#. Как прописать несколько одинаковых функций так, чтобы они возвращали результаты разных типов?
Т.е. имеется класс, который содержит какие-то данные (вернее, одно данное) - одного из трех типов (int, string, datetime). У класса есть свойство, которое возвращает название типа хранимых данных. Вопрос в том, как считать сами эти данные? Т.е., вроде, код должен быть таким: string Field(string FieldName); int Field(string FieldName); DateTime Field(string FieldName); Но ни C# такого ни поддерживает, ни здравая логика. Либо код должен быть таким (используя шаблоны): Field<typeofdata>(string FieldName) Но тут синтаксическая ошибка.
я думаю тут подойдет такой код
object Field(string propertyName)
{
if ( this.GetType().GetProperty(propertyName) != null )
return this.GetType().GetProperty(propertyName).GetValue(this,null);
else throw new ArgumentException("Такого поля не существует");
}
object Field(string propertyName)
{
if ( this.GetType().GetProperty(propertyName) != null )
return this.GetType().GetProperty(propertyName).GetValue(this,null);
else throw new ArgumentException("Такого поля не существует");
}
Вообще-то странная логика! Мало того, что функция имеет одинаковое название и одинаковый тип аргумента, так ещё возвращая данные разного типа мы должны их куда-то присвоить! ? То есть потом появится ещё одна проблема: как принимать данные любого типа?
Ну сделать модно двумя способами функциональный: объявить класс, который содержит все эти три типа и возвратить объект этого класса? А как узнать какой будет объект! ? Ну об этом я сказал выше, хотя в классе можно прописать метку возвращаемого значения.
Или сделать возвращение по ссылке!
Правда это в С++, но вроде должно и там работать!
Ну сделать модно двумя способами функциональный: объявить класс, который содержит все эти три типа и возвратить объект этого класса? А как узнать какой будет объект! ? Ну об этом я сказал выше, хотя в классе можно прописать метку возвращаемого значения.
Или сделать возвращение по ссылке!
Правда это в С++, но вроде должно и там работать!
насколько я помню можно так:
public string Field(string FieldName){}
public string Field(int FieldName){}
public string Field(DateTime FieldName){}
но тип возвращаемого значения нельзя менять! разве что использовать шаблоны!
public string Field(string FieldName){}
public string Field(int FieldName){}
public string Field(DateTime FieldName){}
но тип возвращаемого значения нельзя менять! разве что использовать шаблоны!
в c# нет шаблонов. там есть обобщённые типы и методы, но вам нужны не они, а банальный полиморфизм.
Попробуй либо шаблоны, как сказал Frisian, либо вот так через один метод:
public object Field(string FieldName)
{
if(FieldName == "DateTime")
return this.dateTime;
if(FieldName == "int")
//Ну и т. д.
}
Потом приводишь к требуемому типу:
DateTime time = (DateTime)Field("DateTime");
public object Field(string FieldName)
{
if(FieldName == "DateTime")
return this.dateTime;
if(FieldName == "int")
//Ну и т. д.
}
Потом приводишь к требуемому типу:
DateTime time = (DateTime)Field("DateTime");
Похожие вопросы
- C++. Зачем определять чистую виртуальную функцию?
- Если функция в СИ не возвращает никакого значения (т.е. void) то зачем она вообще нужна?
- слышал что в с++ функция main всегда неявно возвращает в конце return 0 и поэтому писать это не нужно. так ли это?
- определение объема жесткого диска на C++. просьба написать кусок кода. функцию
- Почему документации по программированиям да и любую документацию не делают психологи для разных типов мышления людей?
- Возврат нескольких значений функции
- C++ Везде написано, что sizeof() с массивом в качестве аргумента возвращает полный размер. А в данной функции не так.
- Вопрос про возвращаемое значение из функции в С++.
- Вопрос для тех кто знает точный ответ, язык C про функции все подробности вопроса внутри...
- Функции в языке программирования C.