Casting объекты на типы имеет смысл только во время компиляции , Как вы отреагируете на литой объект в своем коде?
Объект уже имеет его «оригинальный» тип. Дело в том, что когда вы угрожаете ему как object
, вы не знаете его тип во время компиляции. Разумеется, во время выполнения он будет действовать так, как вы называете «оригинальный» тип.
Предположим, у вас есть класс, который переопределяет ToString()
метод:
public class Foo
{
public override string ToString() { return "I am foo"; }
}
Тогда у вас есть кусок кода:
Foo foo = new Foo();
object obj = foo;
// obj is of course Foo type
Console.Write(obj.ToString());
Он будет результата курса в письменной форме «Я Foo» в консоль, потому что переменная obj
имеет тип Foo
, и она будет действовать правильно.
Тогда предположим, у нас есть класс:
public class Bar
{
public override string ToString() { return "I am bar"; }
public void Foobar() {}
}
И кусок не реальный код, который вы хотите иметь:
object obj = new Bar();
// your runtime type casting here:
var casted = (obj.GetType()) obj;
Вопрос: что вы будете делать с вашей casted
переменной? Можете ли вы назвать метод Foobar()
? Как вы узнаете, можете ли вы вызвать метод Foobar()
во время компиляции, когда вы не знаете тип?
Возможно, вы ищете полиморфизм? Может быть, отражение? Может быть, динамические объекты?
EDIT: Из того, что вы говорите, вам нужно отражение, механизм для исследования типов во время выполнения. См. Это:
var type = obj.GetType();
var props = type.GetProperties(BindingFlags.Instance | BindingFlags.Public);
foreach(var prop in props)
{
Console.WriteLine("property: {0} type:{1}", prop.Name, prop.PropertyType);
}
Является ли этот язык C#? Если это так, отметьте это как таковое. –
Почему вы хотите использовать, когда вы не собираетесь использовать переменную casted во время компиляции. Просто используйте отражение объекта. – Euphoric
Это действительно любой объект или может извлечь некоторые методы и использовать интерфейс? Ondrej Svejdar прав, вы должны использовать общее кодирование стиля C# (private void CallFunc (Object o) – Bjoern