Startsidan  ▸  Texter  ▸  Teknikblogg

Anders Hesselbom

Programmerare, skeptiker, sekulärhumanist, antirasist.
Författare till bok om C64 och senbliven lantis.
Röstar pirat.

Category: C#

En ny terminalemulator för Windows Forms
2023-12-16

Jag har utvecklat en GUI control för Windows Forms (.NET 8.0) som emulerar en textterminal från 1970-talet. Den stöder in- och utmatning av text samt enkel pixelbaserad grafik. Den har events som meddelar vad användaren gör, och funktioner för att s [...]

Standardvärden som skickas till en metod i C#
2023-08-15

I C# kan standardvärden (default value) på en parameter i en metod sättas både i själva metoddeklarationen i klassen som håller metoden och i eventuella interfaces som klassen ärver ifrån. Dessa standardvärden behöver inte stämma överens med varandr [...]

Det finns enorma optimeringsmöjligheter när man använder GDI från .NET
2023-07-17

När man ska jobba med bitmapsgrafik i .NET är prestanda en ständigt återkommande utmaning. I .NET har vi dels tillgång till GDI (som låter oss rita pixlar individuellt) och något som kallas för GDI+, som erbjuder möjligheten att rita geometriska fig [...]

Change configuration values in runtime in .NET Framework
2023-05-10

I stumpled upon the problem of having to change the configuration values in an old .NET Framework 4.0 system while it is running, and it has been possible to do since .NET Framework 2.0. The compiled App.config file will be named like the assembl [...]

A JS implementation of the Harter-Heighway Dragon Curve
2023-04-24

Five years ago, I did a post in Swedish on the Harter-Heighway Dragon Curve, with C# source code. I have translated that code to JavaScript and added animation to the rendering. The fractal describes a way of folding a piece of paper so that its out [...]

Return by reference
2023-04-13

Om inget annat anges skickas parametrar till funktioner "by value" i C#. Det innebär att den mottagande funktionen får en egen kopia av värdet som skickas. Att skicka "by reference" (nyckelordet ref) skiljer sig därmed, eftersom funktionen får en re [...]

Referenstyper eller värdetyper?
2023-04-11

Programmeringsspråket C# skiljer på referenstyper och värdetyper. I andra högnivåspråk, som t.ex. Java, har man fram till nyligen bara antagit att egna typer är referenstyper, men som C#-programmerare tvingas man då och då att tänka på skillnaden me [...]

FileUtility PathInfo
2022-12-14

FileUtility är ett bibliotek för Windows/.NET 6.0 som (för närvarande) innehåller en enda klass: PathInfo. Den kan bl.a. korta ner en filsökväg för presentation på skärmen och ange fil- och katalogstorlek i flera format, inklusive ett människovänlig [...]

Kolla tärningsformationer
2022-06-08

Har du någon gång suttit och stirrat på 5-6 tärningar och funderat på vilka formationer ögonen utgör? Nu behöver du inte fundera längre, för här är en C#-klass som ger dig svaret på nolltid! Mycket nöje! Kodexempel: https://github.com/Anders-H/Di [...]

Sprite (OpenGL i .NET Framework)
2022-02-24

Jag har dragit nytta av ett gammalt C#-repository som wrappar OpenGL för .NET Framework för att bygga ett minimalistiskt spelramverk. Följande kod visar stjärnor som flyger över skärmen, från höger till vänster. Projektet är .NET Framework 4.8 som j [...]

Mutable strings i C#
2022-02-13

Den strängtyp som finns inbyggd i C# är "immutable", vilket betyder att den inte kan ändra värde. Jag har skapat en "mutable string", som kapslar strängtypen i en klass. Det innebär att man kan anropa funktioner på strängen för att få den att ändra [...]

Input parser för textäventyrsspel
2021-09-21

Biblioteket TextAdventureGameInputParser kan användas för att parsa användarens input i ett textäventyr. Parsern tar en mening i stil med GO NORT, OPEN DOOR, USE GOLD KEY ON DOOR eller GIVE FOOD TO GANDALF och ger en struktur med ordklasser och refe [...]

Lorenz vattenhjul
2021-07-03

Lorenz-attraktionen är en fraktal vars formel beskriver en rotationshastighet (illustrerat med en radie) och en rotationsriktning. Så här ser den ut, implementerad i Commodore BASIC 7.0: 10 GRAPHIC 1,1 20 X=5 30 Y=5 40 Z=5 50 T=0 60 S=1/200 70 D= [...]

GetEnumerator extension method
2021-05-18

En ganska enkel men ytterst trevligt tillägg i C# version 9 är möjligheten att skapa en extension method av GetEnumerator (som konsulteras när en samling ska enumereras). Betrakta denna lilla lista: var people = new List<string> { "Sven [...]

Objektnotation: XML, JSON, PSON
2021-04-23

Här följer en kort kommentar om tre olika format för textbaserad objektnotation. XML Fördelar: Stöd för dokumenttypsdefinitioner (DTD) och scheman. God tillgång på bra API:er.Nackdelar: Mycket overhead (ett "pratigt" språk), endast Visual Basi [...]

C# 9 Records
2021-01-26

Hur projektmallarna pytsas ut i Visual Studio har verkligen övergått mitt förstånd. Beträffande .NET 5.0 var Windows Forms-mallen tillgänglig långt innan Console Application-mallen, men nu är äntligen allt på plats. Med anledning av det vill jag sum [...]

Hur svårt är det att gissa ett tal?
2020-12-28

En person tänker på ett tal mellan 1 och 100, och en annan ska gissa vilket. Om den som gissar skulle gissa fel, så får han reda på om han har gissat på ett för stort eller för litet tal. Den bästa strategin för att gissa rätt på så få försök som mö [...]

C# from the command window
2020-11-07

If you are using .NET Core (or .NET 5.0) you can easily activate the ability to run C# code from the command window (Windows Terminal or the old cmd.exe). To get started, install dotnet-script by typing: dotnet tool install --global dotnet-scr [...]

DOD är bättre OOD för tidskritiska system
2020-08-29

Objektorienterad design (OOD) är ofta ett bra val för att det är relativt enkelt att använda med robusta mönster att följa. Men när man programmerar tidskritiskt, som t.ex. i när man gör spel, kan det vara värt att titta på dataorienterad design (DO [...]

Othello
2020-03-14

Här är källkoden Othello, till ett enkelt strategispel för Windows-skrivbordet. Du vinner över datorn genom att ha se till att spelplanen innehåller fler svarta brickor än vita. Reglerna finns på Wikipedia. Uppdatering 2023-02-11: Installationspr [...]

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, båda kan skapas [...]

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! https://www.youtube.com/watch?v=oK-JCxXHp7c

Pathfinding i terräng
2019-01-04

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 solv [...]

Diamantproblemet i C# 8
2019-01-02

Idag skriver jag på Nethouse-bloggen om diamantproblemet i C#, som introduceras med default interface members. Läs gärna inlägget här.

IMDb Scraper
2018-06-22

IMDb Scraper is a simple library for extracting a movie title and year from a IMDb ID. Installation (.NET Framework 4.6): Install-Package ImdbScraper Example: var repository = new Repository(); var result = repository.GetMovie(87332); Console.WriteLi [...]

Fem inlägg om C# på Nethouse-bloggen
2017-09-05

Jag har skrivit fem inlägg om C# på Nethouse blogg som jag tänkte be att få dela med mig av. Kortare kod med mönstermatchning i C# 7 Förenklad hantering av funktioner som producerar multipla värden i C# Skalning i MonoGame Late binding i [...]

Entity Framework 6
2017-02-13

Entity Framework 6 (EF6) är mycket enkelt att komma igång med. För att få tillgång till aktuell version, använd Nuget-paketet EntityFramework. Den här bloggposten visar det minsta man behöver veta för att komma igång med EF6 i sitt program. Ins [...]

Fullskärm med exakt virtuell bildupplösning
2017-02-07

Om du vill bygga ett spel med Monogame som 1) körs i fullsärmsläge och 2) har en låg virtuell upplösning, typ 320 x 200 pixlar, så finns en enkel lösning. Istället för att rendera spelet på din backbuffer, så renderar du till en render target som är [...]

Skala upp Monogame
2017-02-05

När man bygger retrospel med en upplösning på omkring 320 x 200 pixlar, vill man gärna skala upp spelet så att sprites och andra objekt inte blir så små på en modern skärm. För den som programmerar Monogame finns flera lösningar. Jag tycker att [...]

Labyrint (recursive backtracking)
2017-01-05

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 [...]

Lite nyheter i C# 7: Lokala funktioner
2016-11-18

Till en viss grad har man kunnat skapa lokala funktioner i C# under en tid. public void DoSomething() { Func<int, int> d = (x) => x * 2; for (var i = 1; i <= 8; i++) Console.WriteLine(d(i)); } I C# 7 kan man skapa f [...]

Lite nyheter i C# 7: Tuples
2016-11-17

Om jag vill skapa en funktion som skickar tillbaka två värden, kan det lösas med en tuple. I .NET Framework är tuples implementerat som en generisk klass. Denna funktion skickar tillbaka en int och en string: public static Tuple<int, string> D [...]

Introduktion till evolutionära algoritmer
2016-10-29

.NET Sprite
2016-05-22

Hårdvarurenderade sprites i C#: Github: https://github.com/r1sc/Sprite Nuget: https://www.nuget.org/packages/Sprite/ ...och så några "bloopers"...

List invocations in constructor
2016-02-05

This example shows how to list the method invocations in a C# file. This is the file that will be read: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleAppli [...]

Parse Transact SQL
2016-01-07

To parse T-SQL from C#, add a reference to the following libraries (listed under Extensions, not under Framework): Microsoft.Data.Schema.ScriptDom Microsoft.Data.Schema.ScriptDom.Sql My examples imports the following namespaces: using System; us [...]

CodeSearchTree use case: Read constant values
2015-12-23

For this example, I am using Visual Studio 2015 Community edition to create a console application.  Make sure that you are using .NET Framework 4.6 or later. Let's say that you have a .cs file with constants that looks something like this: using Sys [...]

Generics i C#
2015-11-03

Snittvärde
2015-10-18

Jag fick en fråga om att räkna ut snittvärden. Det finns olika sätt att lösa det på, där det enklaste kanske är att använda Excel för att göra ett enkelt datablad. Jag tänkte visa hur man kan göra i C# för att få en start till ett registerprogram. Fö [...]

Anropa alla klienter från ASP.NET
2015-05-29

SignalR är ett ramverk som låter webbklienter prata direkt med webbservern via sockets, och som låter webbservern prata direkt med klienterna på samma sätt. Tack vare SignalR kan du göra funktionsanrop direkt till de användare som för tillfället råka [...]

Om aktörer
2015-05-22

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 [...]

Schemalagda meddelanden i Akka .NET
2015-05-20

Denna gång tänker jag använda en Windows Forms Application för att visa schemaläggaren i Akka .NET. Som vanligt, för att komma åt Akka .NET i ditt projekt, växla till fönstret Package Manager Console och skriv Install-Package Akka. Om du inte ser Pac [...]

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. [...]

Introduktion till Akka .NET Remote
2015-05-13

Akka .NET Remote låter aktörerna i Akka .NET skicka meddelanden till andra processer genom Windows Sockets. Det innebär att ett system kan distribueras över flera processer oavsett om de ligger på samma fysiska maskin eller på en annan maskin i nätve [...]

Enkel trådning i .NET med Akka
2015-04-24

Historiskt sett har det varit ganska komplicerat att bygga multitrådade applikationer i .NET. Rent tekniskt var det enkelt att sjösätta en tråd med hjälp av klassen System.Threading.Thread, men om mycket skulle göras började koden ganska snabbt likna [...]

Simple full screen support in Windows Forms
2014-10-16

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 KeyPrevi [...]

Evolutionary sudoku
2013-11-07

This is a successful attempt to use an evolutionary algorithm to generate a sudoku board. A complete board is created after usually less than a million iterations, sometimes after a couple of hundred generations. using System; using System.Collection [...]



En kopp kaffe!

Bjud mig på en kopp kaffe (20:-) som tack för bra innehåll!

Bjud på en kopp kaffe!

Om...

Kontaktuppgifter, med mera, finns här.

Följ mig

Twitter Instagram
GitHub RSS

Public Service

Folkbildning om public service.

Hem   |   linktr.ee/hesselbom   |   winsoft.se   |   80tal.se   |   Filmtips