È una cattiva idea aggiungere un nuovo metodo (che implementa un nuovo algoritmo) a una libreria di classi per la sua nuova versione ed esporre un'opzione di versione che gli utenti possono selezionare?
È solo per la retrocompatibilità in cui una vecchia applicazione potrebbe richiedere una sequenza costante di numeri casuali per un certo numero di seme.
Il seguente codice potrebbe parlare molto meglio della mia idea. Spero che tu abbia l'essenza.
//Class Library:
namespace MyGenerator
{
public sealed class MyRandom
{
public enum Version { One, Two }// add more options in the future
private int current;
private Version version;
public MyRandom(int seed, Version version = Version.One)
{
current = seed;
this.version = version;
}
public int Next()
{
switch (version)
{
case Version.One:
AlgorithmOne();
break;
case Version.Two:
AlgorithmTwo();
break;
// add more options in the future
}
return current;
}
private int AlgorithmOne()
{
current = (current * 1234567890 + 987654321) & 0x7FFFFFFF;
return current;
}
private int AlgorithmTwo()
{
current = (current * current + current) & 0x7FFFFFFF;
return current;
}
// add more algorithm in the future
}
}
e
//Console Application (for testing purposes):
using MyGenerator;
using System;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
const int seed = 12345;
MyRandom rnd = new MyRandom(seed, MyRandom.Version.Two);
Console.WriteLine(rnd.Next());
Console.ReadLine();
}
}
}