Je ne suis pas sûr de savoir comment faire cela.Comment vérifier bool entrant et définir le champ privé pour ensuite être envoyé au constructeur de base
L'objectif: Je veux vérifier la bool useWebServiceConnection entrant (comme vous le voyez ci-dessous) et définissez le champ connectionString privé avant de le transmettre au constructeur de base en fonction useWebServiceConnection pour régler la connectionString.
Je pense que le constructeur de classe de base est appelé d'abord toujours droit? Donc ça ne va pas marcher.
En ce moment, je reçois aussi "Impossible d'accéder à la propriété statique dans le contexte statique" pour cette ligne:
public ProjectDB(bool useWebServiceConnection) : base(connectionString)
CLASSE DE BASE:
public class DatabaseBase { chaîne readonly privée connectionString; usage privé de boolCounters; Public DatabaseBase (chaîne connectionString) { this.connectionString = connectionString; }
CLASSE DÉRIVÉS:
La classe dérivée a d'abord travaillé comme ça avant que j'ai changé ce que vous voyez ci-dessus (nous avons eu fonctionner comme ça jusqu'à ce que la nécessité de vérifier un bool et le changement chaînes de connexion en cas de besoin):
public class ProjectDB : DatabaseBase
{
readonly static string connectionString = ConfigurationManager.AppSettings["SomeOtherConnectionString"];
public ProjectDB() : base(connectionString)
{
}
private SqlConnection CreateConnection()
{
return new SqlConnection(connectionString);
}
MIS à JOUR: Voici ce que je suis venu avec. Regardez le rapport d'origine que j'ai essayé contre ce que je suis venu avec base de votre aide:
public class ProjectDB : DatabaseBase
{
readonly static string connectionString = ConfigurationManager.AppSettings["SomeOtherConnectionString"];
private bool useWebServiceConnection;
private bool isWebServiceCall;
public ProjectDB() : base(connectionString)
{
}
public ProjectDB(bool useWebServiceConnection) : base(useWebServiceConnection
? ConfigurationManager.AppSettings["ServiceConnectionString"]
: ConfigurationManager.AppSettings["SomeOtherConnectionString"])
{
}
Notez que j'ai un champ connectionString locale dans la classe dérivée. C'est ainsi que le code existant peut simplement appeler et instancier ProjectDB() sans passer aucune valeur et cela signifie qu'il utilisera simplement la chaîne de connexion DB par défaut "SomeOtherConnection" comme elle est initialisée en haut de la classe dérivée comme vous pouvez le voir.
Nous avons également le deuxième constructeur surchargé maintenant. Avec votre aide, maintenant j'ai la possibilité de spécifier s'il faut utiliser une chaîne de connexion de service spécial lorsque je crée un nouvel objet ProjectDB.
Je pense que c'est une bonne solution. Si ce n'est pas le cas, ou si vous avez une meilleure implémentation, informez-moi, mais j'ai appris de bonnes idées et je ne savais pas que je pourrais transmettre ce paramètre du constructeur local au constructeur de base, merci beaucoup ... maintenant je sais. Une chose cependant, je n'ai pas vraiment besoin d'un backing field local useWebServiceConnection maintenant que je viens de le passer au constructeur de ma classe de base.Donc, cela vient donc obsolète je l'ai enlevé du constructeur:
this.useWebServiceConnection = useWebServiceConnection;
alors quel est le point de régler this.useWebServiceConnection = useWebServiceConnection; si j'ai satisfait à mes exigences en envoyant le chèque en tant que param au constructeur de la base? – PositiveGuy
Je viens de partir parce que vous l'aviez là. Je pensais que vous pourriez avoir une utilisation future pour cela prévu. Je supprimerais si j'étais vous, car il peut être ajouté en arrière si nécessaire. –