Azt szeretném kérdezni, hogy hasznos-e ez a fogalom, csináltak-e már más nyelvek ilyesmit, vagy ez az ötlet problémás vagy csak rossz. Ha problémás, akkor szintén nagyra értékelnénk annak magyarázatát, hogy milyen elveket sért meg.
Annak érdekében, hogy érthető legyen, mire gondolok, írtam néhány C# pszeudokódot, ahol létrehoztam egy képzeletbeli "lusta" kulcsszót, amely ennek az ötletnek a konkrét megvalósítását adja. A "lazy" kulcsszó arra utasítja a fordítót, hogy 1) explicit öntsön át minden olyan objektumot, amelynek funkciói megfelelnek egy interfészszerződésnek, még akkor is, ha a szóban forgó objektum nem valósítja meg kifejezetten az interfészt, és 2) ha az explicit cast függvény nem. t létezik, hozza létre, 3.) Az objektumot vissza lehet adni arra, ami volt, 4.) Ha az objektum nem valósítja meg az interfész által megkívánt metódusokat, fordítói hibát kap.
Ezután a következő kód lefordítható és lefutna.
class Program
{
public interface iRoll
{
public void Roll();
public int Dimensions { get; set;}
}
public class Basketball
{
public void Roll()
{
Console.WriteLine("I'm a rolling basketball");
}
private int _dimensions = 3;
public int Dimensions { get { return _dimensions; } set { _dimensions = value; } }
public string Brand = "BallCo.";
}
public class Tire
{
public void Roll()
{
Console.WriteLine("I'm a rolling tire");
}
private int _dimensions = 3;
public int Dimensions { get { return _dimensions; } set { _dimensions = value; } }
}
static void Main(string[] args)
{
Tire MyTire = new Tire();
Basketball MyBall = new Basketball();
var myList = new List<iRoll>();
myList.Add(lazy iRoll MyTire);
myList.Add(lazy iRoll MyBall);
foreach(iRoll myIRoll in myList)
{
myIRoll.Roll();
Console.WriteLine("My dimensions: " + myIRoll.Dimensions);
}
}
}
Az előnyök nem mindig az, hogy az osztályok őrült módon valósítják meg az interfészeket, és nem kell egy alaposztályból származtatniuk az egyéni interfész megvalósításához, amikor az alaposztály már rendelkezik a szükséges metódusokkal és tulajdonságokkal (pl. bizonyos helyzetek külső könyvtárakkal, bizonyos felhasználói felülettel). vezérlők).
Jó ötlet, rossz ötlet, szörnyű ötlet? Más nyelvek kísérleteznek ezzel?