Public Class CustomWorkbook Private _baseWorkbook As Workbook Public Sub New(ByVal source As Workbook) _baseWorkbook = source End Sub Public Shared Narrowing Operator CType(ByVal source As WorkbookClass) As CustomWorkbook Return New CustomWorkbook(source) End Operator Public Shared Widening Operator CType(ByVal source As CustomWorkbook) As WorkbookClass Return CType(source._baseWorkbook, WorkbookClass) End Operator End Class
'Option strict On Dim monClasseur As CustomWorkbook = CType(CType(app.Workbooks.Add(), WorkbookClass), CustomWorkbook) 'Option strict Off Dim monClasseur As CustomWorkbook = CType(app.Workbooks.Add(), WorkbookClass)
Public Class WorkbookClass Implements Workbook
Dim monClasseur as Workbook = app.Workbooks.Add()
Public Shared Narrowing Operator CType(ByVal source As Workbook) As CustomWorkbook Return New CustomWorkbook(source) End Operator
Les opérateurs de conversion ne peuvent pas convertir à partir d'un type interface
- Les opérateurs doivent être déclarés 'Shared'.
- L'opérateur '=' doit avoir deux paramètres.
- Les paramètres operator ne peuvent pas être déclarés 'ByRef'.
- Impossible de faire référence à un membre instance d'une classe à partir d'une méthode partagée ou d'un initialiseur de membre partagé sans une instance explicite de la classe.
Class MaClass Private a as integer Public Shared Sub Toto() Me.a = 12 'L'erreur est provoquée par cette ligne car a est un membre d'instance End Sub End Class
Public Shared Operator =(ByVal A MonType, ByVal B as MonType) As Boolean Return (A.Quelquechose = B.QuelqueChose) End Operator
Public Property MonWorkBook as Microsoft.Office.Interop.Excel.Workbook Get Return P_Workbook End Get Set (value as Microsoft.Office.Interop.Excel.Workbook) P_Workbook = value End Set End Property
a.MonWorkBook = b.MonWorkBook
Public Function Copy(wb as Microsoft.Office.Interop.Excel.Workbook) as Microsoft.Office.Interop.Excel.Workbook Me.P_Workbook = wb Return wb End Sub
La méthode "Operator =" permet de redéfinir l'égalité entre deux objets et non l'affectation. D'ou les différentes erreurs
Je ne vois pas très bien ce que vous voulez exactement faire.
Dim ObjWbExcel as Microsoft.Office.Interop.Excel.Workbook Dim MonObj as MaClass [...] MonObj = ObjWbExcel
Dim ObjApExcel as Microsoft.Office.Interop.Excel.Application dim MonObj as MaClass [...] MonObj = ObjApExcel.Workbooks.Add(1)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionImports Microsoft.Office.Interop.Excel Public Class CustomWorkbook Private _baseWorkbook As Workbook Private _customProperty As String Public Sub New(ByVal source As Workbook) _baseWorkbook = source End Sub Public ReadOnly Property BaseWorkbook As Workbook Get Return _baseWorkbook End Get End Property Public Property CustomProperty As String Get Return _customProperty End Get Set(ByVal value As String) _customProperty = value End Set End Property End Class
Dim MonObj As New CustomWorkbook(ObjApExcel.Workbooks.Add(1)) MonObj.CustomProperty = "Toto" Console.WriteLine("Nombre d'onglets {0} ; Custom {1}", MonObj.BaseWorkbook.Worksheets.Count, MonObj.CustomProperty)
Public Class CustomWorkBook Implements Microsoft.Office.Interop.Excel.Workbook
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim app As New Application Dim wbStandard As Workbook = app.Workbooks.Add() Dim wbCustom As Workbook = New CustomWorkBook(app.Workbooks.Add()) Dim wbCustomCast As CustomWorkBook = CType(wbCustom, CustomWorkBook) wbCustomCast.CustomProperty = "Toto" Dim wbCopie As Workbook = wbCustom Me.Test(wbStandard) Me.Test(wbCustom) Me.Test(wbCopie) app.Quit() End Sub Private Sub Test(ByVal wb As Workbook) If (TypeOf wb Is CustomWorkBook) Then Dim cust As CustomWorkBook = CType(wb, CustomWorkBook) Console.WriteLine("Nombre d'onglets {0} ; Custom = {1}", _ cust.Worksheets.Count, _ cust.CustomProperty) Else Console.WriteLine("Nombre d'onglets {0}", wb.Worksheets.Count) End If End Sub
Dim wbStandard As Workbook = app.Workbooks.Add() Dim wbCustom As Workbook = New CustomWorkBook(app.Workbooks.Add())
Public Sub _PrintOut(....) Implements Excel._Workbook._PrintOut _baseWorkBook._PrintOut(....) End Sub
pas d'opérateur désaffectation
Cl_Custom Cl_Custom::operator= (Cl_Custom &Source) { [...] return *this; } Cl_Custom Cl_Custom::operator=(Cl_Standrad &Source) { [...] return *this; }
Obj_Custom = Obj_Standrad; //C'est surtout ça que je voulais pouvoir faire Obj_Standard = Obj_Custom; //Ou Obj_Standard = Obj_Custom.GET_StandardWorkbook();
pas d'opérateur désaffectation
Étais une erreur de frape :
Il faut lire "pas d'opérateur d'affectation"
Mais si je comprend bien le code j'ai une compatibilité "descendante" (soit de Custom -> Standard) et non "montante" (soit Standard -> Custom)
Dim a as Integer = 10 Dim b as String = a
Public Class digit Private dig As Byte Public Sub New(ByVal b As Byte) Me.dig = b End Sub 'CType de digit => Byte Public Shared Widening Operator CType(ByVal d As digit) As Byte Return d.dig End Operator 'CType de Byte => digit Public Shared Narrowing Operator CType(ByVal b As Byte) As digit Return New digit(b) End Operator End Class
'Option strict On Dim a As Byte = 10 Dim b As digit = CType(a, digit) Dim c As Byte = CType(b, Byte) 'Option strict Off Dim a As Byte = 10 Dim b As digit = a Dim c As Byte = b
'Option strict On Dim monClasseur As CustomWorkbook = CType(CType(app.Workbooks.Add(), WorkbookClass), CustomWorkbook)
Il me semblais que "_Workbook" étais l'interface et que Workbook étais la classe
Public Class WorkbookClass Implements _Workbook, Workbook, WorkbookEvents_Event
Dim monClasseur as IWorkbook = app.Workbooks.Add()
Donc si je veut hériter de Workbook il faut en réalité que j'hérite de WorkbookClass
S'ils avaient nommé l'interface 'IWorkbook' et la classe 'Workbook', il faudrait faire :
Code Visual Basic :
Dim monClasseur as IWorkbook = app.Workbooks.Add()
Dim monClasseur as Workbook = app.Workbooks.Add()
Dim monClasseur as New Workbook(MonExcelApplication, NombreDeFeuille)
Heeeee bà non... Si Workbook est une classe et IWorkbook est un interface on aurais très bien pu faire :
Dim monClasseur as Workbook = app.Workbooks.Add()
Dim monClasseur as Workbook = CType(app.Workbooks.Add(), Workbook)
Voir même :
Dim monClasseur as New Workbook(MonExcelApplication, NombreDeFeuille)
Dim monClasseur as New Workbook(classeurACopier)