PDA

View Full Version : [C#]Override di un metodo


Mattyfog
24-05-2010, 18:10
Salve a tutti, dovrei eseguire l'override di un metodo della dll si Watin.
Il codice della dll che ci interessa è questo:

namespace WatiN.Core
{
public class FireFox : Browser
{
private static string GetExecutablePath()
{
string path;
var mozillaKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Mozilla\Mozilla Firefox");
if (mozillaKey != null)
{
path = GetExecutablePathUsingRegistry(mozillaKey);
}
else
{
// We try and guess common locations where FireFox might be installed
var tempPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), @"Mozilla FireFox\FireFox.exe");
if (File.Exists(tempPath))
{
path = tempPath;
}
else
{
tempPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) + " (x86)", @"Mozilla FireFox\FireFox.exe");
if (File.Exists(tempPath))
{
path = tempPath;
}
else
{
throw new FireFoxException("Unable to determine the current version of FireFox tried looking in the registry and the common locations on disk, please make sure you have installed FireFox and Jssh correctly");
}
}
}

return path;
}
}

Io ho tentato di eseguire l'override così:

public class MyWatiN : WatiN.Core.FireFox
{
public override string GetExecutablePath()
{
string path = @"Firefox Portable\App\firefox\firefox.exe";
return path;
}
}

Ma in fase di compilazione ho un errore:
'NomeProgetto.MyWatiN.GetExecutablePath()': impossibile trovare un metodo adeguato per eseguire l'override
Cosa sbaglio?

tomminno
24-05-2010, 19:47
Quand'è che ti decidi a studiare un pò le basi?

GetExecutablePath è statica e privata. 2 buone ragioni per non poterne fare l'override.

gugoXX
24-05-2010, 19:53
Salve a tutti, dovrei eseguire l'override di un metodo della dll si Watin.

--cut--

Ma in fase di compilazione ho un errore:
'NomeProgetto.MyWatiN.GetExecutablePath()': impossibile trovare un metodo adeguato per eseguire l'override
Cosa sbaglio?

2 errori.
Il metodo originale e' statico, e per i metodi statici non e' previsto override.
Il secondo errore e' che il metodo originale non e' virtual (non potrebbe comunque esserlo, essendo static). Solo dei metodi virtual (or abstract) si puo' effettuare override.

Se pensi di poter fare in modo che i metodi interni alla classe Firefox eseguano una tua versione di GetExecutablePath() invece che quella in dotazione, mi spiace dirti che non potrai.
Se invece ti serve che i tuoi metodi interni alla tua classe MyWatiN eseguano una tua versione di GetExecutablePath() allora potrai.

Mattyfog
24-05-2010, 20:54
Uffaa! Mannaggi per di più non riesco neppure a modificare i sorgenti originali della libreria WatiN perchè in fase di compilazione mi dice che manca un file .snk.
Forse perchè, suppongo a causa del fatto che uso la versione express, mi viene detto che le cartelle soluzione non sono disponibili in questa versione del programma e quindi una versione mi viene presentata come non disponibile. Però questo file anche cercandolo non esiste proprio.

tomminno
24-05-2010, 23:12
Il file snk serve per firmare gli assembly, lo puoi tranquillamente rigenerare tramite le proprietà del progetto.

Mattyfog
25-05-2010, 20:44
Appena avrò tempo proverò! Grazie!