Delegados en Interface

25/03/2005 - 17:15 por Pedro Rivera | Informe spam
Estoy comenzando con C# y he definido el siguiente código
para una interface:

namespace Uno
{
public delegate void Delegado(object sender, EventArgs e);
public interface IPrueba
{
event Delegado Primero;
event Delegado Segundo;
}
}

La primera pregunta es: ¿Una clase que implemente esta
interface, levantará dos eventos distintos (Primero y
Segundo) o solo levantará el mismo evento que puede ser
llamado con dos nombre dstintos? Lo que pretendo es que
sean dos eventos distintos como por ejemplo Paint y
Click. Los dos eventos tomarán el mismo tipo y la misma
cantidad de parámetros.

La segunda pregunta: Este código lo he definido en una
ClassLibray. Después estoy queriendo usar esa interface
en otro proyecto pero no encuentro la forma de agregarlo,
¿Cómo agrego una referencia a esta interface? El problema
que me encuentro es que no se crea un archivo .dll,
¿Porqué?

Preguntas similare

Leer las respuestas

#6 Octavio Hernandez
27/03/2005 - 10:18 | Informe spam
Pedro,

a) Efectivamente, sólo puede haber una propiedad vectorial "predeterminada".
Si necesitas tener más, decláralas como propiedades "normales":

public interface IPrueba
{
string [,] Items { get; };
string [,] Values { get; };
}

Los índices deberán ser enteros, pero ese es exactamente tu caso...

b) Para convertir una cadena a número, usa algo así:

int n;
bool esEntero;
// intenta ver si 's' representa un entero...
try { n = int.Parse(s); esEntero = true; } catch { esEntero = false; }

Mucha gente te dirá (y con razón) que esto no es muy eficiente porque
potencialmente lanza una excepción. Para la próxima versión de .NET habrá un
método TryParse() que hará lo mismo pero sin usar excepciones.

Slds - Octavio

-
"Pedro Rivera" escribió en el mensaje
news:207601c5324f$ca990bc0$
Gracias Bela y Octavio, efectivamente, la .dll la
encontré en la pestaña Proyectos.

Mi nueva duda es respecto a las propiedades con
parámetros en las interfaces (¿indexadores?). Según los
libros que tengo, debo declararla así:

string this[int a, int b]{get;}

Pero resulta que tengo otras dos propiedades también de
tipo string que toman los mismos parámetros. ¿Cómo lo
hago?

Aprovechando la consulta, una pregunta más (sucede que
provengo del Visual Basic):
¿Cuál es el equivalente de isNumeric(objeto)? Es la
función que comprueba si una cadena es numérica.



Estoy comenzando con C# y he definido el siguiente


código
para una interface:

namespace Uno
{
public delegate void Delegado(object sender, EventArgs


e);
public interface IPrueba
{
event Delegado Primero;
event Delegado Segundo;
}
}

La primera pregunta es: ¿Una clase que implemente esta
interface, levantará dos eventos distintos (Primero y
Segundo) o solo levantará el mismo evento que puede ser
llamado con dos nombre dstintos? Lo que pretendo es que
sean dos eventos distintos como por ejemplo Paint y
Click. Los dos eventos tomarán el mismo tipo y la misma
cantidad de parámetros.

La segunda pregunta: Este código lo he definido en una
ClassLibray. Después estoy queriendo usar esa interface
en otro proyecto pero no encuentro la forma de


agregarlo,
¿Cómo agrego una referencia a esta interface? El


problema
que me encuentro es que no se crea un archivo .dll,
¿Porqué?
.

Respuesta Responder a este mensaje
#7 Pedro Rivera
27/03/2005 - 17:35 | Informe spam
Esto que pones es lo que quiero, declararlas como
propiedades normales:

public interface IPrueba
{
string [] Items { get; };
string [] Values { get; };
}



en lo anterior, ¿Dónde declaro los parámetros que se le
deben pasar a la propiedad? En Visual Basic, la propiedad
ya implementada en una clase debería verse así (en
realidad tengo dos propiedades exactamente iguales, solo
difieren en el nombre):

Public Property Cadenas1 (Byval a as integer, ByVal b as
integer) as string()
get

end get
end property

Lo que no sé es como declarar en C# los valores "a" y "b".
La clase que implementa esta propiedad dispone de varios
arreglos de cadenas. La propiedad anterior devuelve uno
de esos arreglos de cadenas. Los parámetros "a" y "b"
sirven para decidir cuál de esos arreglos se va a
devolver.



Pedro,

a) Efectivamente, sólo puede haber una propiedad


vectorial "predeterminada".
Si necesitas tener más, decláralas como


propiedades "normales":

public interface IPrueba
{
string [,] Items { get; };
string [,] Values { get; };
}

Los índices deberán ser enteros, pero ese es exactamente


tu caso...

b) Para convertir una cadena a número, usa algo así:

int n;
bool esEntero;
// intenta ver si 's' representa un entero...
try { n = int.Parse(s); esEntero = true; } catch {


esEntero = false; }

Mucha gente te dirá (y con razón) que esto no es muy


eficiente porque
potencialmente lanza una excepción. Para la próxima


versión de .NET habrá un
método TryParse() que hará lo mismo pero sin usar


excepciones.

Slds - Octavio

-
"Pedro Rivera" escribió en el


mensaje
news:207601c5324f$ca990bc0$
Gracias Bela y Octavio, efectivamente, la .dll la
encontré en la pestaña Proyectos.

Mi nueva duda es respecto a las propiedades con
parámetros en las interfaces (¿indexadores?). Según los
libros que tengo, debo declararla así:

string this[int a, int b]{get;}

Pero resulta que tengo otras dos propiedades también de
tipo string que toman los mismos parámetros. ¿Cómo lo
hago?

Aprovechando la consulta, una pregunta más (sucede que
provengo del Visual Basic):
¿Cuál es el equivalente de isNumeric(objeto)? Es la
función que comprueba si una cadena es numérica.



Estoy comenzando con C# y he definido el siguiente


código
para una interface:

namespace Uno
{
public delegate void Delegado(object sender, EventArgs


e);
public interface IPrueba
{
event Delegado Primero;
event Delegado Segundo;
}
}

La primera pregunta es: ¿Una clase que implemente esta
interface, levantará dos eventos distintos (Primero y
Segundo) o solo levantará el mismo evento que puede ser
llamado con dos nombre dstintos? Lo que pretendo es que
sean dos eventos distintos como por ejemplo Paint y
Click. Los dos eventos tomarán el mismo tipo y la misma
cantidad de parámetros.

La segunda pregunta: Este código lo he definido en una
ClassLibray. Después estoy queriendo usar esa interface
en otro proyecto pero no encuentro la forma de


agregarlo,
¿Cómo agrego una referencia a esta interface? El


problema
que me encuentro es que no se crea un archivo .dll,
¿Porqué?
.





.

Respuesta Responder a este mensaje
#8 Zephryn Xirdal
27/03/2005 - 19:59 | Informe spam
Metiéndome en donde no me llaman, te diré que el C/C++ compilado a nativo
(léase MFC o win32 directo) sigue siendo *enormemente* más rápido que
cualquier otro.

Respecto a los .NET, al parecer no hay diferencias sensibles en cuanto a
rendimiento entre ellos; las ventajas son otras; VB sigue siendo VB (al
menos en la sintaxis y "la forma de hacer"), el C++ .NET te permite mezclar
código nativo con código manejado sin más complicación, y el C# es "algo
intermedio". Para un programador de C/C++ es bastante fácil adaptarse a él
(todavía, cuando paso una clase entera como parámetro me tengo que remarcar
que es una referencia, no un objeto completo), tiene las ventajas del C++ y
no sus desventajas (personalmente opino que eso no es cierto, al menos
completamente) y en la siguiente versión va a tener muchas más mejoras.

Todos los tres son completamente orientados a objetos (y si no que se lo
digan a los visualbasiqueros de toda la vida), y respecto al rendimiento,
pues parece ser que el C# y VB generan el mismo código, y que el C++ es algo
más obtuso, porque al compilar genera una capa intermedia, aunque es capaz
de optimizar mejor.

Respecto al rendimiento en general, y tras haber manejado algunos programas
completamente hechos en .NET, te diré que generalmente la carga es lentísima
(sobre todo en cosas complejas como el RSS Bandit) y luego el funcionamiento
es bastante rápido, con ligeras mejoras conforme se van ejecutando más veces
las mismas rutinas.



Deseo hacerles una pregunta sobre la rapidez de los
lenguajes .Net. Anteriormente se decía (y no tengo porque
dudarlo) que C++ era un lenguaje más potente y rápido que
Java y Visual Basic. Ahora con esto de que los códigos se
compilan primero en un lenguaje intermedio, ¿sigue
existiendo esa diferencia de rapidez y potencia entre
lenguajes? Si es así, ¿En que lugar queda C#?



Estoy comenzando con C# y he definido el siguiente


código
para una interface:

namespace Uno
{
public delegate void Delegado(object sender, EventArgs


e);
public interface IPrueba
{
event Delegado Primero;
event Delegado Segundo;
}
}

La primera pregunta es: ¿Una clase que implemente esta
interface, levantará dos eventos distintos (Primero y
Segundo) o solo levantará el mismo evento que puede ser
llamado con dos nombre dstintos? Lo que pretendo es que
sean dos eventos distintos como por ejemplo Paint y
Click. Los dos eventos tomarán el mismo tipo y la misma
cantidad de parámetros.

La segunda pregunta: Este código lo he definido en una
ClassLibray. Después estoy queriendo usar esa interface
en otro proyecto pero no encuentro la forma de


agregarlo,
¿Cómo agrego una referencia a esta interface? El


problema
que me encuentro es que no se crea un archivo .dll,
¿Porqué?
.

Respuesta Responder a este mensaje
#9 Octavio Hernandez
28/03/2005 - 01:21 | Informe spam
Pedro,

Fíjate que yo te puse

string [,] Items { get; }; // fíjate en la coma !!!

lo que implica que la propiedad devuelve un array rectangular de dos
dimensiones. Y los índices tienen que ser enteros...

Slds - Octavio

"Pedro Rivera" escribió en el mensaje
news:1a6901c532e2$8b323bd0$
Esto que pones es lo que quiero, declararlas como
propiedades normales:

public interface IPrueba
{
string [] Items { get; };
string [] Values { get; };
}



en lo anterior, ¿Dónde declaro los parámetros que se le
deben pasar a la propiedad? En Visual Basic, la propiedad
ya implementada en una clase debería verse así (en
realidad tengo dos propiedades exactamente iguales, solo
difieren en el nombre):

Public Property Cadenas1 (Byval a as integer, ByVal b as
integer) as string()
get

end get
end property

Lo que no sé es como declarar en C# los valores "a" y "b".
La clase que implementa esta propiedad dispone de varios
arreglos de cadenas. La propiedad anterior devuelve uno
de esos arreglos de cadenas. Los parámetros "a" y "b"
sirven para decidir cuál de esos arreglos se va a
devolver.



Pedro,

a) Efectivamente, sólo puede haber una propiedad


vectorial "predeterminada".
Si necesitas tener más, decláralas como


propiedades "normales":

public interface IPrueba
{
string [,] Items { get; };
string [,] Values { get; };
}

Los índices deberán ser enteros, pero ese es exactamente


tu caso...

b) Para convertir una cadena a número, usa algo así:

int n;
bool esEntero;
// intenta ver si 's' representa un entero...
try { n = int.Parse(s); esEntero = true; } catch {


esEntero = false; }

Mucha gente te dirá (y con razón) que esto no es muy


eficiente porque
potencialmente lanza una excepción. Para la próxima


versión de .NET habrá un
método TryParse() que hará lo mismo pero sin usar


excepciones.

Slds - Octavio

-
"Pedro Rivera" escribió en el


mensaje
news:207601c5324f$ca990bc0$
Gracias Bela y Octavio, efectivamente, la .dll la
encontré en la pestaña Proyectos.

Mi nueva duda es respecto a las propiedades con
parámetros en las interfaces (¿indexadores?). Según los
libros que tengo, debo declararla así:

string this[int a, int b]{get;}

Pero resulta que tengo otras dos propiedades también de
tipo string que toman los mismos parámetros. ¿Cómo lo
hago?

Aprovechando la consulta, una pregunta más (sucede que
provengo del Visual Basic):
¿Cuál es el equivalente de isNumeric(objeto)? Es la
función que comprueba si una cadena es numérica.



Estoy comenzando con C# y he definido el siguiente


código
para una interface:

namespace Uno
{
public delegate void Delegado(object sender, EventArgs


e);
public interface IPrueba
{
event Delegado Primero;
event Delegado Segundo;
}
}

La primera pregunta es: ¿Una clase que implemente esta
interface, levantará dos eventos distintos (Primero y
Segundo) o solo levantará el mismo evento que puede ser
llamado con dos nombre dstintos? Lo que pretendo es que
sean dos eventos distintos como por ejemplo Paint y
Click. Los dos eventos tomarán el mismo tipo y la misma
cantidad de parámetros.

La segunda pregunta: Este código lo he definido en una
ClassLibray. Después estoy queriendo usar esa interface
en otro proyecto pero no encuentro la forma de


agregarlo,
¿Cómo agrego una referencia a esta interface? El


problema
que me encuentro es que no se crea un archivo .dll,
¿Porqué?
.





.

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida