using System ;
using System. Collections. Generic ;
using System. Linq ;
using System. Text ;
using System. Threading ;
using System. Threading. Tasks ;
class father
{
private string lastname;
public string Lastname {
get { return lastname; }
set { lastname = value ; }
}
public father ( string lastname)
{
Lastname = lastname;
}
}
class son : father
{
private string firstname;
public string Firstname {
get { return firstname; }
set { firstname = value ; }
}
public son ( string firstname, string lastname) : base ( lastname)
{
Firstname = firstname;
}
}
interface InChange< in T>
{
void show ( T temp) ;
}
interface OutChange< out T>
{
T show ( ) ;
}
interface noT< T>
{
}
class noTF : noT< father>
{
}
class noTS : noT< son>
{
}
class inchange : InChange< father>
{
public void show ( father temp)
{
Console. WriteLine ( "lastname =" + temp. Lastname) ;
}
}
class outchange : OutChange< son>
{
public son show ( )
{
return new son ( "gang" , "wang" ) ;
}
}
class Program
{
static void Main ( string [ ] args)
{
father fa = new father ( "hao" ) ;
son son = new son ( "gang" , "wang" ) ;
Console. WriteLine ( fa. Lastname) ;
Console. WriteLine ( son. Lastname) ;
OutChange< son> outson = new outchange ( ) ;
OutChange< father> outfather = outson;
fa = outfather. show ( ) ;
Console. WriteLine ( fa. Lastname) ;
InChange< father> infather = new inchange ( ) ;
InChange< son> inSon = infather;
inSon. show ( son) ;
noT< father> notF = new noTF ( ) ;
noT< son> notS = new noTS ( ) ;
notF = notS;
notS = notF;
Console. ReadLine ( ) ;
}
}