|
The CodeDOM namespace is useful for dynamically generating code and compiling it.
But I need a slightly different thing: I'd like to read existing source code files, find all methods/properties/constructors in it, and add some more logging to the functions. I.e. I'd like to add a call to our logging function automatically as first line to every function, and - if possible - automatically add another call to the logging function before each return statement/end of function. And then save the changed source code file - for "normal" use with Visual Studio for further development.
There's an ICodeParser interface in CodeDOM - but no implementation seems to exist:
CSharpCodeProvider csc = new CSharpCodeProvider(new Dictionary<string, string>() { { "CompilerVersion", "v3.5" } });
ICodeParser parser = csc.CreateParser();
and parser is null.
CSharpCodeProvider csc = new CSharpCodeProvider(new Dictionary<string, string>() { { "CompilerVersion", "v3.5" } });
TextReader reader = new StreamReader(@"C:\Path\To\MySource.cs");
CodeCompileUnit ccu = csc.Parse(reader);
throws an Exception: this function is not supported.
An old article can be found here on code project - but its code fails already when reading following line:
public sealed partial class MyClass : System.Windows.Forms.Form
Does .NET provide some classes for that? Or are there some tools already available? I do not want to write my own source code parser.
|
|
|
|
|
|
Thanks for this nice idea.
When I read about Aspect Oriented Programming some time ago, it looked just like a new fashion. But now it seems to be useful.
|
|
|
|
|
hi folks,
i have a list of bitmap image files, which i want to convert into a single video file. i want to do this using visual studio C sharp. Can someone please help me on this? Any suggestions,sample code, links would be helpful.
Thanks in advance.
hema.
|
|
|
|
|
|
Hi,
I'd like to get access to file icon of any application. The Problem is, I'd like to have the one which has been generated as preview (Like a icon of a pptx (PowerPoint) file which is the first slide or like a video which has the first frame as icon).
Does anyone know how to access these kind of icons?
|
|
|
|
|
Using the Windows API Pack[^], you can do:
Image img = ShellFile.FromFilePath(@"C:\foo.pptx").Thumbnail.BitmapSource;
/ravi
|
|
|
|
|
Thank you very much. Only thing about your code is, that you can't cast a BitmapSource to a Image.
So I changed the code to this:
Image img = ShellFile.FromFilePath("C:\\foo.pptx").Thumbnail.Bitmap;
|
|
|
|
|
Sorry for the hasty typing!
/ravi
|
|
|
|
|
I have a simple Employee Class as follows:
I want to create a new Employee object from a different Class having Main
Can I return the Complete Employee object from here when Main class uses GetEmployee method.
The code below errors out saying variable e in last method below is undefined
namespace TestEmployee
{
class Employee
{
int eId;
string eName;
double age;
public Employee(int i, string n, double a)
{
eId = i;
eName = n;
age = a;
}
public Employee()
{
eId = 1105;
eName = "Peter Cava";
age = 32 ;
}
public Employee GetEmployee()
{
Employee e;
e.eId = this.eId;
e.eName = this.eName;
e.eId = this.eId;
return e;
}
}
}
|
|
|
|
|
Employee e <big>= new Employee()</big>;
(Though I don't know why you're cloning the Employee.)
|
|
|
|
|
If you want to create a new employee from your main method you should just use:
Employee myEmployee = new Employee();
if you really want to have a cloned object you should have a look at the Interface ICloneable for implementing the right methods.
|
|
|
|
|
thanks for the reply
I did create a new Employee Object
class Employee
{
int eId;
string eName;
double age;
public Employee(int i, string n, double a)
{
eId = i;
eName = n;
age = a;
}
public Employee()
{
}
public Employee GetEmployee()
{
Employee e = new Employee();
e.eId = this.eId;
e.eName = this.eName;
e.age = this.age;
return e;
}
}
and calling this from a form where I give the 3 inputs and want to see it in new set of fields
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
int i1 = Convert.ToInt32(textBox1.Text);
string nm = textBox2.Text;
double d2 = Convert.ToDouble(textBox3.Text);
Employee em = new Employee(i1, nm, d2);
em.GetEmployee();
textBox5.Text = em.GetEmployee?? for Employee id from em object
textBox6.Text = em.GetEmployee?? for Employee name from em object
textBox6.Text = em.GetEmployee?? for Employee age from em object
}
|
|
|
|
|
Well the problem is that all your variables in the employee class don't have public, or private set. In that case they will be private and only be seen within the class Employee.
To manage that the correct way, C# offers you the posibility to create so called "Properties".
I've created properties as you see in the code of the class.
public class Employee
{
public int EId{get;set;}
public string EName{get;set;}
public double Age{get;set;
public Employee(int i, string n, double a)
{
eId = i;
eName = n;
age = a;
}
public Employee()
{
}
}
In the Form1 class you can access the properties pretty simple by creating a new Employee with Employee em = new Employee();
and access each property like: em.Name
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
int i1 = Convert.ToInt32(textBox1.Text);
string nm = textBox2.Text;
double d2 = Convert.ToDouble(textBox3.Text);
Employee em = new Employee(i1, nm, d2);
textBox5.Text = em.EId.ToString();
textBox6.Text = em.EName;
textBox6.Text = em.Age.ToString();
}
Hope this helps.
|
|
|
|
|
Oh My, cant believe I dropped the ball on private and public declaration.
Thanks very much for the details and how to use the properties.
One last question please
in the Employee class, if I have to return as an object I need to have a variable of the class and do a new, right like in
Employee e = new Employee(); in code below.
class Employee
{
public int eId;
public string eName;
public double age;
public Employee(int i, string n, double a)
{
eId = i;
eName = n;
age = a;
}
public Employee()
{
}
public Employee GetEmployee()
{
Employee e = new Employee();
e.eId = this.eId;
e.eName = this.eName;
e.eId = this.eId;
return e;
}
|
|
|
|
|
You should not expose the class variables as public. Rather good design uses property accessors. That way any logic that may need to be executed when a property is set or accessed will be executed.
You don't always need an instance of a class to access it's properties or methods.
public class Employee
{
private static int m_Id;
public static Foo()
{
}
public static int Id{get; set;}
}
int id = Employee.Id;
Employee.Foo();
Static methods and properties are not bound to an instance of a class. The Factory pattern quite often uses this to create instances
public class Employee
{
public static Employee CreateEmployee()
{
return new Employee();
}
}
Employee e = Employee.CreateEmployee();
No comment
|
|
|
|
|
Thanks very much Mark and Bob for the response. I think I am slowly getting it.
Thanks, Ravi
|
|
|
|
|
I don't understand what the purpose of GetEmployee is. It is functionally doing a clone but that seems to be unnecessary.
|
|
|
|
|
Hi,
Just creating an Instance of Employee Class......
Thanks & Regards
Arya1685
P Before printing think about your responsibility & commitment with the Environment! ü
|
|
|
|
|
when login a page then if invalid pasword so only that particular part is refershed not whole page
|
|
|
|
|
are you sure what you are asking?
***** Programme comme si dept soutien technique. est plein de tueurs en série et ils savent adresse de votre domicile. *****
|
|
|
|
|
I am using a UdpClient to listen for messages from another machine on the same network. I am using port 63000 and this works on all machines except for 1. This one machine gives me an AccessDenied SocketException when I create the object in the constructor.
I have looked at netstat and TCPView and no other apps/processes are using port 63000. If I move the port to 60001, it works.
My constructor for the UdpClient is using the IPEndPoint object:
private static ipEndPoint IPEndPoint = new IPEndPoint(IPAddress.Any, 63000);
Google has not been helpful, as everything I read says that it is likely because another app/process is using the same port. However, I cannot find anything using that port in netstat or TCPView.
Does anyone have any ideas for me to try or look at?
Thanks!
|
|
|
|
|
Have you tried a clean boot to see if it works then?
The difficult we do right away...
...the impossible takes slightly longer.
|
|
|
|
|
Check your firewall settings – perhaps it is explicitly blocked as a serving port.
|
|
|
|
|
I came from two different organizations that used this architecture however, I'm not at all sure which is the best between this one and another one.
Architecture #1.
The one I'm use to you have 3 projects: 1. A presenation layer project 2. A business layer project 3. A data layer project. Within the data layer lies your data classes. In your data layer you fill your objects up with Generic List like List<yourdataobject> and pass the collection of objects back to the business layer where you do your business rules and then pass the collection of object/s to the presentation layer.
Architecture #2.
The current way in which my college has proposed and has used in the past is that he has a folder with business objects and a folder with data objects(data layer). Your data layer passes a datatable to your business object which then loads the datatable to a index array for the class. The presentation layer then initializes the business object and calls its methods for CRUD etc ...
What we are not sure about is what is the best way. and WHAT is the pros and cons of both. Are we going to have trouble using WCF between the layers if we choose one over the other ?
Why are architects using one over the other ?
Greatly appreciate any input ..
Thanks
Jon
modified 13-Oct-11 10:56am.
|
|
|
|