2012-05-30 1 views
0

Je voudrais obtenir la classe de base deObtenez classe de base héritant de la classe

public class Class1 : BrowserWindow 

Je suis en train de « convertir » Class1 en UiBrowserWindow par une méthode UiBrowserWindow. Quelque chose comme ça ...

public class UiBrowserWindow : Microsoft.VisualStudio.TestTools.UITesting.BrowserWindow { 
    public static UiBrowserWindow Convert(Microsoft.VisualStudio.TestTools.UITesting.BrowserWindow browserWindow) { 
     UiBrowserWindow result = new UiBrowserWindow(); 
     result = (UiBrowserWindow)browserWindow; 
     return result; 
    } 
} 

UiBrowserWindow browserWindow = UiBrowserWindow.Convert(UIMap.Class1.GetType().BaseType); 
//UIMap.Class1 is a property of UIMap 

Ce code produit l'erreur Argument type 'System.Type' is not assignable to parameter type 'Microsoft.VisualStudio.TestTools.UITesting.BrowserWindow'

CODE MISE À JOUR:

public class UiBrowserWindow : Microsoft.VisualStudio.TestTools.UITesting.BrowserWindow { 
    public static UiBrowserWindow convert(Microsoft.VisualStudio.TestTools.UITesting.BrowserWindow browserWindow) { 
     UiBrowserWindow result = (UiBrowserWindow)browserWindow; 
     return result; 
    } 
} 

// Usage... 
UiBrowserWindow browserWindow = UiBrowserWindow.convert(UIMap.Class1); 

Cela provoque une exception InvalidCastException: Unable to cast object of type 'automatedTesting.Class1' to type 'UiBrowserWindow'

TestMethod ...

[TestMethod] 
public void CodedUITestMethod1() { 
    this.UIMap.RecordedMethod1(); 

    UiBrowserWindow browserWindow = UiBrowserWindow.convert(UIMap.Class1); 
    Assert.IsNotNull(browserWindow.getUiTestControl<HtmlDiv>(new[] { 
     new PropertyExpression(HtmlDiv.PropertyNames.Id, "logo") 
    })); 
} 
+1

Ne pas utiliser de réflexion. Voir la réponse de Novakov: Un objet de type 'Class1' est toujours" assignable à "le type' BrowserWindow'. C'est ce que l'héritage (classes de base) est tout. Aussi: Dans votre méthode 'Convertir ', n'attribuez pas' result' à un 'new UiBrowserWindow' que vous n'allez pas utiliser quand même. Supprimez simplement cette expression 'new'. –

Répondre

2

Je suppose que vous devez omettre une partie ".GetType() BaseType." Et appeler:

UiBrowserWindow browserWindow = UiBrowserWindow.Convert(UIMap.Class1); 

Mise à jour: Class1 dérive de BrowserWindow, UiBrowserWindow dérive de BrowserWindow. Class1 n'est pas UiBrowserWindow. La conversion que vous essayez ne fonctionnera qu'avec l'opérateur de fusion de surcharge (mais je ne le recommande pas). Expliquez ce que vous essayez d'obtenir parce que cette façon de procéder ne fonctionnera pas

+0

Cela provoque une exception 'InvalidCastException: Impossible de convertir l'objet de type 'automatedTesting.Class1' en type 'UiBrowserWindow'' – bflemi3

+0

' Class1' est une classe générée automatiquement par le générateur de test d'interface utilisateur codé dans VS2010. Nous avons déjà un framework construit pour créer des tests d'interface utilisateur codés à travers le code. Ce que j'essaye de faire est de permettre à un utilisateur d'enregistrer un TestMethod puis d'écrire ses propres assertions en utilisant notre framework, mais pour ce faire, la classe wrapper 'BrowserWindow' générée automatiquement (dans ce cas' Class1') doit être converti dans notre classe wrapper, 'UiBrowserWindow'. Je vais ajouter le TestMethod ci-dessus pour la clarification – bflemi3

+0

Comme 'UiBrowserWindow',' Class1' vous donne un handle pour le navigateur. – bflemi3

1

Il existe une méthode C# standard pour ce faire. Voir MSDN

+0

Je suis confus quant à quand j'utiliserais implicite ou explicite. Pourriez-vous expliquer dans un peu plus de détails s'il vous plaît? Peut-être un exemple – bflemi3

+0

Dans votre cas, vous avez UiBrowserWindow bw = CONVERSION VA ICI ... Puisque vous savez que le type est Class1, vous pouvez simplement le convertir implicitement. Le seul problème avec cela est que vous surchargez l'opérateur et que vous faites des affaires de singe, votre lisibilité de code est diminuée. Le plus simple serait UiBrowserWindow bw = UIMap.Class1; mais c'est étrange à lire. –

+0

Je ne saurai pas toujours quelle sera la classe à convertir (Class1), et d'après mes recherches, C# ne fait pas d'opérateurs génériques. Y at-il un moyen de faire ce travail si je ne connais pas le type, sauf qu'il va implémenter 'BrowserWindow'? – bflemi3

Questions connexes