C#

Alternativa a Visual Studio

Un piacevole ambiente di sviluppo (che probabilmente esiste da una vita) ma che non conoscevo: http://sharpdevelop.net/OpenSource/SD/Download/   Technorati tags: Visual Studio

.Substring()

Non sto a spiegare cosa fa perchè tutti l'avranno usato molte volte. Il primo parametro indica l'indice 0-based da cui partire. Il comportamento che non mi aspettavo è che l'indice può arrivare alla Length della stringa senza sollevare eccezioni. [C#] String myString = "abc"; bool test1 = String.Compare(myString.Substring(2, 1), "c") == 0; // This is true. myString.Substring(3, 1); // This throws ArgumentOutOfRangeException. bool test2 = String.Compare(myString.Substring(3, 0), String.Empty) == 0; // This is true. Technorati tags: Csharp

C# o VB.NET?

La domanda si ripete ovunque: ma in una realtà aziendale (di q.si dimensione) è giusto o no decidere un linguaggio comune per tutti? Secondo me è giusto definire un linguaggio di sviluppo e obbligare le risorse a utilizzarlo. Inutile dire che, tra i due, scelgo C#. Le uniche eccezioni possono essere rappresentate da: 1.  un team già avviato al vb.net 2.  la presa in carico di un'applicazione esistente. Nelle nuove realtà io opterei già dai colloqui per la selezione di risorse che sviluppano in C#. Per passare dall'uno all'altro basta poco - è vero - ma a volte i tempi sono davvero rigidi e alcune...

Quiz: extension methods

Quale sarà l'output? namespace Extensions{  using System;  using ExtensionMethodsDemo1;     // Define extension methods for any type that implements IMyInterface.     public static class Extension     {        public static void MethodA(this IMyInterface myInterface, int i)        {            Console.WriteLine("Extension.MethodA(this IMyInterface myInterface, int i)");        }        public static void MethodA(this IMyInterface myInterface, string s)         {            Console.WriteLine("Extension.MethodA(this IMyInterface myInterface, string s)");        }        public static void MethodB(this IMyInterface myInterface)         {            Console.WriteLine("Extension.MethodB(this IMyInterface myInterface)");        }    }}namespace ExtensionMethodsDemo1{    using System;    using Extensions;    public interface IMyInterface    {        void MethodB();    }    class A : IMyInterface     {        public void MethodB(){Console.WriteLine("A.MethodB()");}    }     class B : IMyInterface    {        public void MethodB() { Console.WriteLine("B.MethodB()");...

Extension methods

Gli extension methods permettono a metodi statici di essere richiamati usando la sintassi dei metodi di istanza. Questi metodi devono avere almeno un parametro che rappresenta l'istanza del metodo su cui operare. In C# su questo parametro si utilizza la parola chiave this. public static class StringExtensions{     public static bool IsPalindrome(this string s){        ...     } } Questo metodo viene richiamato nel seguente modo: if("hello world".IsPalindrome()){   .... } La classe che definisce l'extension method viene definita "sponsor" e deve essere statica. Ovviamente va importato il namespace della classe sponsor. Vanno usati il minimo indispensabile ;) [Fonte: Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries (2nd Edition) - K. Cwalina, B....

Pseudoquiz - Tanti modi per fare una cosa

Stimolerei il vostro "modo di programmare". Immaginate di avere una combo su una pagina web [c#]. Vi chiedo di riempirla con i giorni della settimana sapendo che nell'applicazione ci sono molte combo di quel tipo. La pagina web deriva da una BasePage : System.Web.UI.Page e ha un metodo già pronto richiamato dalla OnLoad che si chiama PrepareCombo(). Sentiamo varie soluzioni (ovviamente ottimizzate tempi di sviluppo con buon codice). Nei commenti sono ben accette le critiche alle soluzioni proposte. Technorati tags: Csharp

Rinnovo patente

Vediamo di mettere in codice anche questo evento della vita quotidiana che mi è capitato proprio oggi. Come prima idea mi verrebbe da scrivere una classe Patente non statica, istanziarla: Patente myPatente = new Patente(); poi per il rinnovo: myPatente.Rinnova(); dove il metodo non fa altro che aggiornare una proprietà pubblica Anni o privata _anni: public void Rinnova() {      _anni += 10; } Questo è sbagliato per vari motivi: 1. La proprietà privata ha un nome troppo generico (cosa indicano questi anni?); 2. La nomenclatura più appropriata sarebbe Durata e non Anni; 3. Bisognerebbe aggiornarla ogni anno e per il momento non ci interessa. Ci interessa conoscere la validità non per quanti anni...

General naming conventions

Sarebbe bello che tutti le seguissero (per ora enuncio solo quelle basilari): 1. Scegliere nomi LEGGIBILI per gli identificatori 2. Favorire la LEGGIBILITA' e non la BREVITA' (!) 3. Usare solo caratteri alfanumerici (niente underscore) 4. Non usare la notazione ungherese (ammessa la I per le interfacce) Technorati tags: Csharp

ClassLibrary

Con tutto il rispetto per tutti i programmatori, sottolineando che conosco le condizioni di produzione e che faccio parte di questa categoria, mi permetto di scrivere questo racconto per un piccolo sorriso.  Buonasera, siete seduti comodi? Bene! Siete davanti al Visual Studio e state per premere new ClassLibrary? Siete proprio sicuri? E va bene, allora fatelo. Quanto tempo avete a disposizione? Poco? Allora iniziate col chiamare il vostro lavoro "Insieme di classi" e non "Libreria". Se invece ne avete un po' di più allora ve lo permetto . Ma questo insieme di classi serve a voi per seguire un certo pattern o serve per distribuirlo...

Focus in UpdatePanel

<asp:TextBox ID="txtValore" runat="server" onfocus='setTextBoxFocused(this.id);SetEndCursor(this)'   AutoPostBack="true" OnTextChanged="txtValore_TextChanged"></asp:TextBox>   function setTextBoxFocused(clientId) { $.get("SetFocused.aspx?clientId=" + clientId + "&ts=" + new Date().getTime()); }     function SetEndCursor(textBox) { if (textBox.createTextRange) { var fieldRange = textBox.createTextRange(); fieldRange.moveStart('character', textBox.value.length); fieldRange.select(); } }   CodeBehind nel controllo con UpdatePanel: if (Session["TextBoxFocused"] != null) { ScriptManager.GetCurrent(this.Page).SetFocus(Convert.ToString(Session["TextBoxFocused"])); } La pagina richiamata da JSON: SetFocused.aspx protected override void OnLoad(EventArgs e) { base.OnLoad(e); if (Page.IsPostBack) return; Session["TextBoxFocused"] = Request.QueryString["clientId"]; } Grazie a Gae. Technorati tags: .NET,  Csharp

Full C# Archive

«febbraio»
domlunmarmergiovensab
2930311234
567891011
12131415161718
19202122232425
26272829123
45678910