|
In response to your modification: KM should clearly be defined on the base class. It should probably also be a property.
abstract class b
{
public double KM { get; protected set; }
public b Create() { return Activator.CreateInstance(GetType()); }
}
class D1:b
{
public D1() { KM = 1.0; }
}
class D2 : b
{
public D2() { KM = 2.0; }
}
|
|
|
|
|
Console.WriteLine(b.//<big>b.KM is still not avaiable!!</big>}
namespace general
{
class Program
{
static void Main(string[] args)
{
b myClassAb = new D1();
b newClassAb = myClassAb.Create();
Console.WriteLine(b.
}
abstract class b
{
public double KM { get; protected set; }
public b Create() { return (b)Activator.CreateInstance(GetType()); }
}
class D1 : b
{
public D1() { KM = 1.0; }
}
class D2 : b
{
public D2() { KM = 2.0; }
}
|
|
|
|
|
You should be able to use newClassAb.KM.
|
|
|
|
|
Great!!!! It works...Thanks a lot
|
|
|
|
|
I am sorry but, what is the point in creating an instance of a class to just create another instance of the same class? I mean, since Create method is not static it would just work as a constructor so, why don't you just use a constructor?
For example, what you want to do is this:
D1 obj = new D1();
D1 obj2 = D1.Create();
And what I am saying is... why not?
D1 obj = new D1();
D1 obj2 = new D1();
I guess you want a static Create method in your base class, don't you? In this case you will have to make your Create method static and use generics:
abstract class BaseClass
{
public static T Create<T>() where T : BaseClass, new()
{
return new T();
}
}
class DerivedClass : BaseClass { }
This way you could use it like this:
DerivedClass obj = BaseClass.Create<DerivedClass>();
|
|
|
|
|
I was looking for a way to avoid to write the same piece of code in each derived class since they basically do the same thing. I Would like to create a method in the base class. But this should allow you to use methods of derived class Is it?
class D1:b
{
..
public D1 Create() { return new D1(); }
}
class D2 : b
{
..
public D2 Create() { return new D2(); }
}
So my goal is not to do
D1 obj = new D1();
D1 obj2 = D1.Create();
but to do
b myClassAb = new D1();
b newClassAb = myClassAb.Create();
Console.WriteLine(newClassAb.KM);
|
|
|
|
|
Member 4282287 wrote: I need to access to proprieties, methods, etc of class
That does not depend on how you create the objects, I mean, your Create method will not help you to achieve what you want. If you can access KM property of a D1 object which you have declared as its base class type (b in this case), you can becouse KM property is definied within the "b" class interface, but not becouse you have made such a strange Create method. So in your sample:
b myClassAb = new D1();
b newClassAb = myClassAb.Create();
Console.WriteLine(newClassAb.KM)
You don't need the Create method at all. Just use the constructor and one instance of the object:
b myClassAb = new D1();
Console.WriteLine(myClassAb.KM)
|
|
|
|
|
ok thanks understood.
Really the starting example was a bit different ... i.e. I needed a method avaiable only in derived class.
During the forum this method ... become a proprierties..
Apparently I understood. You are right of course.
Thanks for your time
|
|
|
|
|
Hi All,
i googled how we can added events in C# class for COM Interop that can be called in VB6.0 but not able to find out any article that help me.
if any one tried it before then pls guide me.
here is my code.
public interface ICalculator
{
// I guess we need to add a event here but i am not sure .
int Add(int Number1, int Number2);
}
public class ManagedClass:ICalculator
{
public int Add(int Number1,int Number2)
{
// I want to raise an event here so that this event should be consumed in VB
return Number1+Number2;
}
}
i done all the step to make the dll to be used in VB.
|
|
|
|
|
COM interop is supposed to work with normal .Net events (i.e. event EventHandler<MyEventArgs> Calculate ), isn't it? The problem here might be VB6 ...
|
|
|
|
|
You have to play a bit with interfaces.
Look here for a sample.
|
|
|
|
|
You'd need to declare the object WithEvents in VB6, otherwise VB6 won't hook those up. Microsoft made a toolkit[^] to make interop between VB6 and .NET a lot easier. I suggest you download it and have a look. There's also a CodeProject article[^] on the subject.
Bastard Programmer from Hell
|
|
|
|
|
I'm not sure about COM interop stuff as I've never needed it - but events are quite straight forward to add:
public interface ICalculator
{
event EventHandler CalculationPerformed;
event EventHandler<int> CalculatedResult;
int Add(int Number1, int Number2);
}
public class ManagedClass : ICalculator
{
public event EventHandler CalculationPerformed;
public event EventHandler<int> CalculatedResult;
public int Add(int number1, int number2)
{
int result = number1 + number2;
OnCalculationPerformed(EventArgs.Empty);
OnCalculatedResult(new EventArgs<int>(result));
return result;
}
protected virtual void OnCalculationPerformed(EventArgs e)
{
EventHandler eh = CalculationPerformed;
if (eh != null)
eh(this, e);
}
protected virtual void OnCalculatedResult(EventArgs<int> e)
{
EventHandler<int> eh = CalculatedResult;
if (eh != null)
eh(this, e);
}
}
public delegate void EventHandler<T>(object sender, EventArgs<T> e);
public class EventArgs<T> : EventArgs
{
private T value;
public EventArgs(T value)
{
this.value = value;
}
public T Value
{
get { return value; }
}
}
|
|
|
|
|
Hi everyone,
I would like to know if someone have experienced slow issues with Bitmap.SelectActiveFrame in a 64 bit system,
or why is the method so much slower in a 64 bit system than in a 32 bit?
Here is a sample code that I have used to test:
Bitmap m_bmp = new Bitmap("C:\\01.tif");
String m_Start = DateTime.Now.ToString("hh:mm:ss");
System.Diagnostics.Debug.WriteLine("Started at: " + m_Start);
for (Int32 a = 0; a < 22; a++)
{ m_bmp.SelectActiveFrame(FrameDimension.Page, a); }
String m_Finish = DateTime.Now.ToString("hh:mm:ss");
System.Diagnostics.Debug.WriteLine("Finished at: " + m_Finish.ToString());
The 01.tif file is a black & white image with 1bpp and 23 pages with 300dpi.
Test made with Windows7 VS2010 .NetFramework 4.0 32 bit: Less than 1 second.
Test made with Windows7 VS2010 .NetFramework 4.0 64 bit: 6 seconds.
This is really a lot.
Can someone be kind to help me ?
Thank you. Best regards.
|
|
|
|
|
Hello
i want to load an image that is 50x25, which are really 2 images of 25x25 into imagelist an use the index to refer them, i can't make it work
Thanks
|
|
|
|
|
ImageList has an Images property which has an AddStrip() method[^]
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Thank you that was the one
|
|
|
|
|
Hello!
How do I post images randomly x, so that we can pick and put in a certain order.
Can help me!
Ps.: Sorry my english
|
|
|
|
|
More detailed required. What do you mean by "post". What do you mean by "pick".
You could put all images or uri strings into a collection, a List, and then use the System.Random class to randomly select the images from the list
"You get that on the big jobs."
|
|
|
|
|
How to extend RectangleF class to have public static function RectangleF Parse(string s); in the similar way as with extension methods when there is no instance variable yet available?
class RectangleF
{
public static RectangleF Parse(string s)
{
...
}
}
Чесноков
|
|
|
|
|
This question is directly related to the one you have asked previously. Please don't repeat and use the current thread so everyone has the details to more accurately answer your questions
I know the language. I've read a book. - _Madmatt
|
|
|
|
|
In which way? I'm not asking about parsing string to rectangle logic here.
I need to add new public static method to RectangleF class without modifying it.
Instead of RectangleF there might be any class.
Чесноков
|
|
|
|
|
maybe...
public static RectangleF Parse(this RectangleF rect, string s)
{
}
very easy to Google this one[^]
EDIT: I got this one a bit wrong. I think thou you just need to return a new instance that is parsed
public static RectangleF Parse(string s)
{
RectangleF result = new RectangleF();
return result;
}
In use...
RectangleF rect = RectangleF.Parse("0,0,100,50");
...but as no one else has posted, maybe I have missed the point again
I may or may not be responsible for my own actions
modified on Tuesday, May 31, 2011 11:40 AM
|
|
|
|
|
This won't work because he's looking to extend the RectangleF class with an instantiation method. Your code requires an instance already (that's kind of what the this in the extension indicates), so perhaps not quite so easy to Google.
|
|
|
|
|
oh yes, my bad completely
I may or may not be responsible for my own actions
|
|
|
|