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();
}
}