Anders Hesselbom

Skeptiker, debattör och religionskritiker

C#

Blandade texter om C# genom åren.

Metabollar

2019-12-14
Jag tänkte visa en komplett implementation av 2-dimensionella metabollar i C#. Denna teknik skulle även kunna användas i 3D. Effekten ser ut... Läs hela texten.

Funktioner är andra klassens medborgare i C#

2019-11-24
I C# 8 är fortfarande funktioner ett slags “andra klassens medborgare” i jämförelse med variabler. Man kan alltså fortfarande göra mer med en variabel än en funktion i C# 8. Varken variabler eller funktioner kan skapas i namnrymder... Läs hela texten.

Value tuples i C# 7.3

2019-03-17
En av många anledningar till att jag älskar C#: Språkligt stöd för value tuples! Läs hela texten.

Pathfinding i terräng

2019-01-19
A* (A-star) är en snabb pathfinder-algoritm som kan användas i t.ex. strategispel för att hitta vägar genom labyrinter eller terräng. Christoph Husse publicerade 2010 en briljant implementation i C# som tillåter egna kriterier, definierade i en solver, för kostnaden att flytta sig från... Läs hela texten.

Harter-Heighways drakkurva

2018-01-28
Harter-Heighways drakkurva är en enkel och vacker linjär fraktal med många intressanta attribut. Dels är dess kontur självrepetitiv och kan pusslas ihop med lika dana konturer på många olika sätt, och linjen som kurvan består av korsar aldrig sig själv, oavsett hur lång drakkurva man väljer att rita. En drakkurva kan beskrivas som en serie av höger- och vänstersvängar... Läs hela texten.

Microsoft Cognitive Services: Computer Vision

2018-01-26 Kognition är den process som i förhållande till erfarenheter omvandlar sinnesintryck till en uppfattning om verkligheten. Microsoft erbjuder ett öppet programgränssnitt (API) för kognitiva tjänster som bl.a. hanterar visuellt innehåll, tal, språk och kunskap, och det är svårt att inte imponeras över vad som kan åstadkommas! Programgränssnittet är ett REST-API och kan därför användas från i princip vilket språk som helst... Läs hela texten.

Kort kod och syftningsfel

2017-09-22 Det finns ibland flera sätt att göra till synes samma sak i C#, t.ex. när det gäller operatörsöverlagring. De olika teknikerna bär på olika syften, och det är ofta bättre att vara tydlig med sina syften än att försöka skriva så kort kod som möjligt. I en situation där man vill kontrollera om ett objekt är korrekt konfigurerat... Läs hela texten.

Lazy evaluated string interpolation

2017-09-05 Sedan version 6 av C# har man haft stöd för string interpolation, och sedan dess har det varit möjligt att exekvera kod i en C#-sträng. Säkerhet uppnås genom att strängen utvärderas i det omfång (scope) som den skapas. Det normala beteendet är att en sträng utvärderas i samma ögonblick som den skapas, vilket betyder att om man skickar en interpolerad sträng till en funktion, så är den utvärderad och klar när funktionen använder strängen. Strängen får inte innehålla fulla programsatser, endast uttryck. Följande kod visar hur... Läs hela texten.

Late binding i C#

2017-09-01 Traditionellt har Visual Basic haft stöd för både early och late binding. Med early binding (statiskt avsändande) avses användning objekt vars typ är känd redan vid kompilering, medan med late binding (dynamiskt avsändande) avses användning av objekt vars typ inte är känd förrän i runtime. Early binding ger typsäkerhet och även bättre prestanda, men man förlorar en del flexibilitet. I Visual Basic har man valt att använda Object som dynamisk typ. Det skulle kunna... Läs hela texten.

Förenklad hantering av funktioner som producerar multipla värden i C#

2017-02-20 Ganska ofta infinner sig behovet av att bygga en funktion som producerar mer än ett värde. Detta löser man exempelvis med hjälp av utparametrar eller tuples (sv: tupel) och båda metoderna har fått bättre stöd i C# version 7.0. Utparametrar har tidigare endast kunnat användas mot fördeklarerade variabler, vilket innebär att variablerna är hänvisade till ett större scope än vad som kanske behövs, vilket kan illustreras med följande exempel. Koden nedan skapar en variabel – count – i en kontext som är större än nödvändigt. Variabeln får sitt värde i konstruktoranropet, och används bara tillsammans med returen från konstruktoranropet, men den... Läs hela texten.

Labyrint (recursive backtracking)

2017-01-17
Jag har börjat arbeta med ett datorspel i kategorin roguelike. Varje spel ska vara unikt, så kartan genereras när en användare spelar spelet. Vid uppstart skapar jag en labyrint som sen används som kontur för rummen som genereras efter behov. De rum som spelaren inte besöker behöver man trots allt inte hålla i RAM, men jag vill ha konturen färdig för att kunna ha lite kontroll över... Läs hela texten.

Introduktion till evolutionära algoritmer

2016-10-16

Om aktörer

2015-05-15
Det finns tre olika typer av aktörer i Akka .NET. Nedan använder jag en ReceiveActor som utmärker sig genom att den använder funktionen Receive för att ta emot ett meddelande. Exemplen som följer förutsätter att namnrymden Akka.Actor är inläst. Alla aktörer har en sökväg som är oberoende av vilken CLR-klass som beskriver dem... Läs hela texten.

Akka .NET Remote duplex

2015-05-15
Jag har tidigare visat hur man skickar enkla meddelanden med Akka .NET Remote. Exemplet bestod av tre projekt, en server, ett datalager och en klient. Här tänkte jag visa hur man använder Akka .NET Remote för att både skicka och ta emot meddelanden. I detta exempel återanvänder jag servern BioServer och datalagret BioData från det förra exemplet... Läs hela texten.

Simple full screen support in Windows Forms

2014-10-14
These simple steps lets you create a Windows Forms application with full screen support. I have changed the DoubleBuffered property to true for flicker free redrawing, StartPosition to Manual to be able to manage startup position in code and KeyPreview to true... Läs hela texten.

Om du istället är intresserad av material om Commodore, klicka här!