|
hypermegachi wrote: but if you know with 90% confidence that you won't need to do any checks or extra operations, why not just make them public fields as default?
Two reasons.
1. That last ten percent.
2. Because you screw the encapsulation of the object. You are allowing external entities know about the internals of the object. If at some future date you need to change that, you have a hell of a lot of code to fix that expects the internals of your object to look a certain way. Never ever underestimate the amount of work it will take to fix a problem like that. All it takes is 30 seconds (less if you are using VS2005 because it can automatically encapuslate fields for you if you want) work, that can save days or even weeks worth of work down the line. (If the project is large enough it might event save months of work)
hypermegachi wrote: with the 10% of the time, if you need the extra operations, you can convert the fields into properties, without needing to change libraries that use it, since the syntax would be the exact same
Not if you follow the guidelines they won't. Properties are always Pascal cased. That means that each word in the property name starts with a capital letter. Fields should be camel cased, which means that the first word is lower cased, each subsequent word is upper cased. So they won't have the same names. Also, some development shops have their own standards like prefixing fields with an underscore, or "m_" (harking back to MFC standards) and so on.
The bottom line is that if you want to be employable you must write code that is easy to understand and maintain. Maintenance costs can skyrocket on a badly written project. Making fields public, innocent as it might sound, is a step that will quickly make a project a maintenance nightmare. I certainly wouldn't want to have to clean up the mess, and neither would you - it is an almost soul destroying part of software development.
My: Blog | Photos
"Man who stand on hill with mouth open will wait long time for roast duck to drop in." -- Confucious
|
|
|
|
|
you're making the assumption that i'm accidentically exposing internal things. but i know for sure that i want everything to see...just like the Point struct.
btw, msdn doesn't say anything about fields in general, but it is very specific about the visibility.
private fields have nothing mentioned about them. this allows programmers to use hungarion, _prefix, or whatever they want. protected fields are camel cased (so derived classes don't get all confused with hungarion crap). and public fields are pascal cased to following everything else in the framework.
since i am following the guidelines, all my public fields are pascal cased, so converting to a property won't require you to refactor/rename every project that uses it.
btw, if you turn on xml, the compiler will warn you about all undocumented public fields as well.
|
|
|
|
|
hypermegachi wrote: just like the Point struct
This is incorrect. It is exposing the private fields x and y through properties called X and Y respectively. Check the IL yourself if you don't believe me.
I'd be very surprised if anything in the .NET Framework exposed its fields publicly.
My: Blog | Photos
"Man who stand on hill with mouth open will wait long time for roast duck to drop in." -- Confucious
|
|
|
|
|
sorry, i shoulda been more clear. i meant for my version of the Point struct i woulda been lazy and have public fields. nothing in the .NET framework exposes fields publicly, and so far that seems to be the only reason i can find in using properties over public fields.
|
|
|
|
|
hypermegachi wrote: i meant for my version of the Point struct i woulda been lazy and have public fields. nothing in the .NET framework exposes fields publicly, and so far that seems to be the only reason i can find in using properties over public fields.
No, there are lots of reasons for using properties over public fields. You just need to (re)read the replies I gave above to find some of them.
My: Blog | Photos
A stitch in time saves nine
|
|
|
|
|
if i didn't read your replies i wouldn't be able to give you a rebuttal for every point you mentioned.
perhaps you wanna read some articles/blogs that share my view...
http://www.devsource.com/article2/0,1759,1541911,00.asp
http://blogs.msdn.com/ericgu/archive/2003/11/12/52836.aspx
http://www.darronschall.com/weblog/archives/000149.cfm
i'm not saying that i'm right, and that you're wrong. i just don't see why people must follow such strict guidelines when other implementations which use less code satisfy the requirements, which is what ultimately matters (XP programmer at heart here).
|
|
|
|
|
We have a method which had a signature similar to the one below:
HRESULT handlebstrref(BSTR* val);
Here 'val' has [in,out] attributes.So we populate 'val' and expect the processed value being populated in 'val' when the method returns
So a COM client works fine as below
BSTR val=SysAllocString(L"value string");
if(_loader)
{
_loader->handlebstrref(&val);
char* retstr = OLE2A(val);
_loader->Release();
}
But when we try to do the same in C# interop we get "Object refrence not set to an instance of the object"
We tried the folliwng
comstringdump _c=new comstringdump();
Iobjdump _i=null;
if(_c is Iobjdump)
{
StringBuilder s=new StringBuilder();
s.Append("DEAL");
_i=(Iobjdump)_c;
_i.handlebstrref(s);
string my = s.ToString();
}
Please help us with the correct semantics to marshal the parameter
|
|
|
|
|
i want to write interrupt service routin in c# for parallel port please help me fast...please...
|
|
|
|
|
mostafa.hk wrote: i want to write interrupt service routin in c# for parallel port
I think .net is just not designed for this... try a plain C language approach that compiles x86 code directly, not il...
protected internal static readonly ... and I wish the list could continue ...
|
|
|
|
|
hello, i need some help with regex. i hardly ever use regex, and i dont know much about it. i have a string, and in it i have something like this:
[something]string here[end]
[somethingelse]string here[end]
[anotherthing]stuff[end] how can i retrieve the text between [somethingelse] and the first [end] after it and store it in another variable (string)?
thanks in advance,
sam kline
|
|
|
|
|
Create a Regex object with the pattern "\[somethingelse\]([\w\W]*?)\[end\]" and do a match on the string.
---
b { font-weight: normal; }
|
|
|
|
|
You might want to try this.
using System.Text.RegularExpressions;
string searchString = "[something]string here[end]"
+ Environment.NewLine
+ "[somethingelse]string here[end]"
+ Environment.NewLine
+ "[anotherthing]stuff[end]";
Regex r = Regex( "\\[somethingelse\\](.*)\\[end\\]" );
Console.WriteLine( r.Match( searchString ).Groups[ 1 ].ToString() );
"we must lose precision to make significant statements about complex systems."
-deKorvin on uncertainty
|
|
|
|
|
Hello,
After playing a while with the new VS2005 I started to convert my existing
Windows Forms projects from .NET 1.1 in VS2003 to .NET V2.0 in VS2005.
After a few days converting and warning and bug hunting I finaly had a
succesfull build op my projects and libs but great was the desolution if I
saw that my application was still using the old style op buttons, textboxes
etc.
My new projects use the nice controls but my converted one not, what am I
missing?
Greets
Jean Paul Mertens
|
|
|
|
|
assuming the form name is form1, look for this under "static void Main()"
Application.Run(new Form1()); and add this above it:
Application.EnableVisualStyles(); hope this helps
sam kline
-- modified at 11:22 Saturday 26th November, 2005
|
|
|
|
|
Sam,
Tnx for reply, that was THE line who did it.
JPM
|
|
|
|
|
Hi,
I wanted to create report in word document. I want to insert images from c# to word document each image in diff. page in same word document. how to do this?
Hope I will solution to my query.
Thanks,
Hiral
-- modified at 12:43 Saturday 26th November, 2005
|
|
|
|
|
Hi
I want to know that how many users are currently online on my site and if they are login then i want to get their loginID also. I am new to ASP.NET. Can anybody help me about this.
Regards
Asif Hameed
|
|
|
|
|
Create a variable on the application level, and on every session start increase that variable by 1, and on the end decrease it again.
void Application_Start(object sender, EventArgs e)
{
Application.Add(numOfUsers, 0);
}
void Application_End(object sender, EventArgs e)
{
}
void Session_Start(object sender, EventArgs e)
{
int n = Convert.ToInt32(Application["numOfUsers"]);
n++;
Application["numOfUsers"] = n;
}
void Session_End(object sender, EventArgs e)
{
int n = Convert.ToInt32(Application["numOfUsers"]);
n--;
Application["numOfUsers"] = n;
}
------------------------------ "The Soapbox has been so ..."
|
|
|
|
|
hi
i need code example to read from excel file
lets sat col F and row 10
i need it in C#
eyalso
|
|
|
|
|
An easy way of accesing an execl file is through OleDb. Thake this article as a start point Accesing Excel Through OleDb[^].
protected internal static readonly ... and I wish the list could continue ...
|
|
|
|
|
Hi...
Is it possible to make some kind of control
when the App starts; to check if framework is
installed? and if not maybe send to a download
page?
Thanks
QzRz
|
|
|
|
|
I think it isnt possible..
The application needs the framework to ran and if it isnt installed
on the machine you can check nothing..
If someone know the way to do this it will be great!
Enrico
|
|
|
|
|
The best (read easiest) way to do this is to create a Deployment Project for the application. VS will include a default system check for the .NET X version that you need and, should it not exist on the target machine, will prompt the user to download the .NET Framework.
"we must lose precision to make significant statements about complex systems."
-deKorvin on uncertainty
|
|
|
|
|
I am hacking together a program to manage the scheduling for software-development projects. I got a great method to manage the work breakdown structure, but the datagridview won't show me an expandable tree structure when I got a table with a recursive structure.
Anyone have any clue what happend to the expandable structure that used to be available in the datagrid from .NET 1.1??
WM.
What about weapons of mass-construction?
|
|
|
|
|
Differences Between the Windows Forms DataGridView and DataGrid Controls [^]
"... The only feature that is available in the DataGrid control that is not available in the DataGridView control is the hierarchical display of information from two related tables in a single control. You must use two DataGridView controls to display information from two tables that are in a master/detail relationship."
The DataGrid is still available to use if you really need this, but then you lose all the handy new features of DataGridView .
Charlie
if(!curlies){ return; }
|
|
|
|