这可能是重复的,但我找不到类似的问题.我不明白如何在没有数据丢失的情况下对基类型进行隐式转换.例如,我创建了这个类Person:
class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
现在,当我做以下时:
object personAsObject = new Person { Name = "Foo", Age = 1 };
var person = (Person) personAsObject;
Console.WriteLine(person.Name);
Console.WriteLine(person.Age);
Run Code Online (Sandbox Code Playgroud)
怎么样object能够保持属性的值Name,并Age因为它只有4种方法Equals,GetHashCode,GetType和ToString?为什么对子类的强制转换会抛出InvalidCastException?我希望这是可能的,因为如果成员不是私人的,那么他们就会被继承.
假设我有一个接口IA,包含一个名为Foo的泛型方法.
public interface IA {
int Foo<T>(T otherType);
}
Run Code Online (Sandbox Code Playgroud)
我希望T与派生类的类型相同:
class A : IA {
int Foo(A otherType)
{
}
}
Run Code Online (Sandbox Code Playgroud)
我试过以下(语法错误):
public interface IA {
int Foo<T>(T otherType) where T : this;
}
Run Code Online (Sandbox Code Playgroud)
我的约束如何才能实现这一目标?