|
Yes, it does apply to the output window as well. A simple test would be to use a StringWriter as the param to an XmlTextWriter , then you already have your string. Output it to a text file and you won't see those escapes. It's just the debugger doing it to you.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Hi,
In an inherited class is it possible to stop the base class constructor from being called?
Thanks
|
|
|
|
|
No. But u can play some tricks and call different base class constructors. That mite work for your case.
top secret xacc-ide 0.0.1
|
|
|
|
|
IIRC, the base constructor must be called in order to initialise things like private member variables that cannot be initialised from a derived class because it will be invisible to the derived class. Probably your best solution would be to create a protected constructor in the base that does nothing and have your derived class call it instead of the default constructor.
"You can have everything in life you want if you will just help enough other people get what they want." --Zig Ziglar
The Second EuroCPian Event will be in Brussels on the 4th of September
Can't manage to P/Invoke that Win32 API in .NET? Why not do interop the wiki way!
My Blog
|
|
|
|
|
Don't define a default constructor in your inheritted class. Also make the default constructor private in the base class.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Tried that with the base classes constructor being private but then I can't inherit from it ( compile error ).
eg.
public class inheritance
{
public String strName;
private inheritance()
{
showMessage();
}
public virtual void showMessage()
{
MessageBox.Show("Base Class");
}
}
public class inheritance2: inheritance
{
public String strTest;
public override void showMessage()
{
MessageBox.Show("inheritance2");
}
}
|
|
|
|
|
You can inherit, but only if you don't have a default constructor in your derivative class. If the base class's default ctor isn't private, it will be called. See my reply to Alvaro below for an example.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Heath Stewart wrote:
Also make the default constructor private in the base class.
No, the default constructor would always be called, regardless.
Heath Stewart wrote:
Also make the default constructor private in the base class.
If it's private in the base class, the derived class will not be able to call it automatically and the compiler will complain.
The only solution is to add a protected constructor to the base class (assuming you can) and have the derived constructor call that explicitly.
Regards,
Alvaro
Give a man a fish, he owes you one fish. Teach a man to fish, you give up your monopoly on fisheries.
|
|
|
|
|
Really? Try compiling this and examining the IL with ildasm.exe or something:
using System;
public abstract class Test
{
private Test()
{
}
protected Test(string name)
{
}
}
public class Test2 : Test
{
protected Test2(string name) : base(name)
{
}
} You're right - the default ctor of the base class won't be called, but if it isn't private it will be called. There was no requirement in the original post for the default ctor of the base class to be called.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
|
Thanks.
I don't mind if people don't always agree with me, but when I'm right, I'm right - and in this case I'm right. See my reply to Alvaro.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Problem:
protected Attribute classes cannot be read if applied to fields in another assembly. It may happen on other attribute targets (i havent tested).
Example:
Assembly A
{
public class Foo
{
[AttributeUsage(AttributeTarget.Field)]
protected class BarAttribute : Attribute{}
}
}
Assembly B : ref A
{
class Foo2 : Foo
{
[Bar]
string bar;
}
}
Now if the FieldInfo.GetCustomAttributes(true) is called, it returns no attrbute instance(s), where modifying the attribute accessor to be public, does return the attribute instance(s).
Can anyone verify this, or suggest a work around (besides going public)?
top secret xacc-ide 0.0.1
|
|
|
|
|
Have you tried this with other MemberInfo derivatives?
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Nope, the fieldinfo stuff i what im using. In the mean while i'll see if i can somehow "sneek" in an test case.
top secret xacc-ide 0.0.1
|
|
|
|
|
leppie wrote:
test case
That was the idea. It definitely looks like a problem and I don't have the time to play around with other options. Just wondering if you tried diagnosing the potential but with other cases.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Hi!
I'm trying to keep track of forms I spawn in my code. I am using the usual instantiation to create the form (Form oForm = new Form()), however I have multiple instances of that form running, and I need to be able to check the name of each one (Maybe using the Tag property).
I've thought about a foreach loop, but I don't know exactly how to implement it.
Thanks!
|
|
|
|
|
You need to keep track of these Form s in a collection so that you can enumerate them. Using a foreach loop is easy - just be sure you don't change the underlying collection.
So, if you had a static collection property on a class (perhaps your Form , if you're dealing with multiple instances of a single Form class, for example), you can add your instances to it and enumerate it at any time:
public class MyForm : Form
{
private static ArrayList instances = new ArrayList();
public MyForm()
{
instances.Add(this);
}
protected override void Dispose(bool disposing)
{
instances.Remove(this);
base.Dispose(disposing);
}
public static IList Instances
{
get { return instances; }
}
} At any time, just use the following code to enumerate your forms and, for example, output the caption:
foreach (MyForm form in MyForm.Instances)
Console.WriteLine(form.Text); If you want to do this for multiple types, then define a class with a public or internal static collection property, perhaps adding a few handy methods. Don't forget to override Dispose(bool) and remove your form instance, and to add it in your constructor for that matter. If you overload your constructor, make sure that only one instances gets added.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Thanks for the reply! I think your way sounds good, I'll try it right away.
Thanks
|
|
|
|
|
I am building an N'tier application and i want to save some constants to one of the tiers wich is a dll file.
can i use a specific configuration file for it? I want it to be in the same directory with the dll and not with exe file of the application, when i am trying it i can't reach it, i mean i cant read from it.
if i have to build an excutable loader for this dll how can i do it, how to build this excutable loader???
Thanks in advanced
Dudi
Be Good...
Dudi
|
|
|
|
|
Building an executable loader won't help. The .config file is configured when the AppDomain is created and all assemblies loaded into that AppDomain use the AppDomain.SetupInformation.ConfigurationFile.
If you need to use a different file, then simply read-in a file without using the ConfigurationSettings class.
If you want the location of the DLL, use Assembly.Location (or other properties based on your deployment scenario), where the Assembly is your DLL. The easiest way to get this is to reference a Type and get the Type.Assembly property. So, if in your DLL you did something like the following, that would get you the filename; append ".config" (for example - could be anything) and you can manually parse that yourself (depending on the content of the file, you could use the XML classes, XML Serialization, etc.):
string path = this.GetType().Assembly.Location;
path += ".config";
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
I need to display listview items in a combobox. From what I have read I need to use a datagrid instead of a listview to achieve this. But I don't understand how to save data in a datagrid. Anyway, if anyone can help me or knows of a good example of displaying listview items in cobobox it would be of great help.
|
|
|
|
|
I'm constructing a search string based on input from user in a web application. This search string basically translates to a search criteria and is assigned to a RowFilter on a dataview. My code throws an exception when my search strings contains quotes and other SQL characters which might invalidate the search criteria.
How do I make sure that this doesnt happen, ie. how to avoid sql escape characters from my search string. Is there a method in .net which will help me. I tried google, searching for SQL escape characters but I couldnt find anything relevant to what i'm looking for.
Also note that the filtering is done on a dataview which is already on cache.
Thanks,
Kannan
|
|
|
|
|
I think the only problem is with ' and you can just replace it with '' (not a quote, but 2 apostrophies).
|
|
|
|
|
I have this method in one of my utility classes:
public static string ToSQL(object value)
{
if (value == null)
return "NULL";
if (value is string)
return "'" + value.ToString().Replace("'", "''") + "'";
return value.ToString();
}
It's handy for SQL search criteria.
Regards,
Alvaro
Give a man a fish, he owes you one fish. Teach a man to fish, you give up your monopoly on fisheries.
|
|
|
|
|
The easiest way to handle this is used parameterized SQL expressions in ADO.NET. For example, if you use a SqlCommand , use the SqlParameter s in the SqlCommand.Parameters (the property documentation includes an example). Constructing the SQL string without the parameters is straight forward enough since you have total control over it. Using parameters for the values (for an INSERT, UPDATE, DELETE, etc.) will eliminate the common problems (trying to inject another statement) while taking care of escaping quotes for you.
This is by far a better and safer alternative. The days of concatenating strings to form a SQL expression are (or at least should be) over.
Microsoft MVP, Visual C#
My Articles
|
|
|
|