Magic the Gathering
Magic the Gathering34897 medlemmar 640 inloggade

Användare:

Lösenord:


Bli medlem
Glömt lösenord?

Sök SvenskaMagic
Sök kort:

Sök medlem:

Sök stad:
Sök forumet:

Sök regelterm:

Sök lek:
FORUMET Start | Forumnytt | Sök | Regler | Privata bord  
COCKTAIL LotR TCG... iRulu - val av mobil ...
C# motsvarighet till C++ #include ???
Senast läst: 12:36:30, 21/4 -24. Läst 1438 gånger.
partysmurphen
JUDGE L1
REDAX
HEDERSMEDLEM
FSVM - LEDAMOT
Linköping
@svm s. 19/2 -03

175 rubriker
7354 svar

C# motsvarighet till C++ #include ??? 11:04:11, 28/4 -15  
Sitter i ett enkelt C# projekt och har två filer. De är i samma namespace, men omfattar två olika klasser: Class_A och Class_B.

Jag har även ett gäng hjälpfunktioner som båda dessa klassers vill nyttja för sin funktionalitet. Dessa vill jag lägga i en egen fil, och göra nåbara för både Class_A och Class_B.


I C++ hade jag gjort en fil HelpFunctions.cpp som sett ut så här:

******************
#include string
#include HelpFunction.h //Prototype declarations etc

<returnType> hlpFkn_1()
{
Do algorithm
Return val;

}

void hlpFkn_2()
{
Do something

}
*******************

I övriga filer hade jag sedan skrivit
#include HelpFunctions.h

och sedan direkt anropat hlpFkn_1() vid behov.



Nu försöker jag göra samma sak i C# och det blir bara nästan bra. Först och främst behöver jag tydligen lägga hjälpfunktionerna i en klass.


*****************
using System.string;

namespace Utils
{

static class HelpFunctions
{
<returnType> hlpFkn_1()
{
Do algorithm
Return val;

}

void hlpFkn_2()
{
Do something
}
}

Sedan inkluderar jag tillgänglighet till klassen i mina övriga två filer mha Using.

Problemet är att jag hela tiden behöver anropa via klassen:
HelpFunctions.hlpFkn_1()

Hur gör jag för att slippa detta?
Det är helt ok om jag behöver ha alla tre filer i samma namespace. Dock kan jag inte lägga dem i en partial class eftersom det är två olika klasser som vill nyttja funktionaliteten.

marcus
MEDLEM
@svm s. 16/11 -02

23 rubriker
64 svar

1. Är inte helt bevandrad i dessa... 13:53:55, 28/4 -15  
Är inte helt bevandrad i dessa språk men är det inte helt enkelt så att du bara behöver skapa en instans av typen HelpFunctions?

var tempInstance = new HelpFunctions();

% och sedan kalla enligt nedan

tempInstance.hlpFkn_1();

tempInstance.hlpFkn_2();

Uppdaterad: 13:54:21, 28/4 -15
IJK

Golgari
MEDLEM
@svm s. 8/12 -03

15 rubriker
192 svar

2. Om du har en tillräckligt ny v... 14:22:55, 28/4 -15  
Om du har en tillräckligt ny version av c# kan du skriva
Using Utils
Using Utils.HelpFunctions

public class temp
{
void DoStuff()
{
hlpFkn_1();
}
}
partysmurphen
JUDGE L1
REDAX
HEDERSMEDLEM
FSVM - LEDAMOT
Linköping
@svm s. 19/2 -03

175 rubriker
7354 svar

3. Det är precis det här jag inte... 14:25:47, 28/4 -15  
marcus skrev 13:53, 28/4 -15 Är inte helt bevandrad i dessa språk men är det inte helt enkelt så att du bara behöver skapa en instans av typen HelpFunctions?

var tempInstance = new HelpFunctions();

% och sedan kalla enligt nedan

tempInstance.hlpFkn_1();

tempInstance.hlpFkn_2();

Det är precis det här jag inte vill göra. Helst hade jag inte viljat ha en klass alls, men C# verkar inte gå med på att man har lösa funktioner som ligger och väntar på att någon ska kalla på dem.


För övrigt behöver man ingen instans om man gör klassen static. Man kallar då på klassen istället för en instans: HelpFunctions.hlpFkn_1().


Tyvärr verkar Utility Classes göras på precis det sättet. Jag hade hoppats på att man skulle kunna skriva t ex
using Utils.HelpFunctions

och sedan helt enkelt bara kunna anropa
hlpFkn_1()
partysmurphen
JUDGE L1
REDAX
HEDERSMEDLEM
FSVM - LEDAMOT
Linköping
@svm s. 19/2 -03

175 rubriker
7354 svar

4. Precis det här vill jag göra! ... 14:29:58, 28/4 -15  
IJK skrev 14:22, 28/4 -15 Om du har en tillräckligt ny version av c# kan du skriva
Using Utils
Using Utils.HelpFunctions

public class temp
{
void DoStuff()
{
hlpFkn_1();
}
}

Precis det här vill jag göra!

Jag borde ha tillräckligt ny version, men projektfilen skapades i en freeversion av Visual Studio, så det kan ha satt begränsningar på koden.

Hur ny version av C# pratar vi om?
stromvap
MEDLEM
Hisings kärra
@svm s. 11/9 -09

36 rubriker
272 svar

5. Det kommer i C# 6 (se länk ned... 14:31:00, 28/4 -15  
Det kommer i C# 6 (se länk nedan) "Using static members":

https://roslyn.codeplex.com/wikipage?title=Language%20Feature%20Status&referringTitle=Home

Uppdaterad: 14:31:51, 28/4 -15
partysmurphen
JUDGE L1
REDAX
HEDERSMEDLEM
FSVM - LEDAMOT
Linköping
@svm s. 19/2 -03

175 rubriker
7354 svar

6. Ok, hur ser jag vilken version... 14:32:19, 28/4 -15  
Ok, hur ser jag vilken version jag har?
Ohga
MEDLEM
@svm s. 8/5 -12

16 rubriker
246 svar

7. Först och främst vill jag argu... 15:42:36, 28/4 -15  
Först och främst vill jag argumentera för uttalbara identifierare, allt blir så mycket enklare att resonera kring och om när man inte behöver vricka tungan:

pastie 1

"Using static members" kommer som sagt i c# 6.0, vilket motsvarar Visual Studio 2015. Har man inte så nytt IDE så finns framförallt två alternativ.

Det mer tveksamma alternativet är att ärva från klassen med hjälp metoder. Här beror det mycket på vad klasserna gör mer exakt. Det funkar inte så bra om klassen redan ärver från en klass då det inte finns multiple inheritance. Det kan också låsa upp kod designen så det blir svårt att ändra senare.

pastie 2

Om hjälp metoderna gäller för objekt av någon speciell klass kan du använda "extension methods". Det ger en klass extra metoder som om de var en del av klassen. Emellertid går alltid de egna metoderna i klassen före extensions om de råkar ha samma namn. Mer info här.

pastie 3

Bortsett från dessa alternativ är det enklaste att bara gilla läget. Det finns andra sätt att få koden snygg. Gillar du inte att behöva nämna klassen innan statiska metoder (vilket jag sympatiserar med) så kan du kanske t.ex. dra ut det till små privata metoder med beskrivande namn?
partysmurphen
JUDGE L1
REDAX
HEDERSMEDLEM
FSVM - LEDAMOT
Linköping
@svm s. 19/2 -03

175 rubriker
7354 svar

8. Jag har sett extensions och de... 16:23:06, 28/4 -15  
Ohga skrev 15:42, 28/4 -15 Först och främst vill jag argumentera för uttalbara identifierare, allt blir så mycket enklare att resonera kring och om när man inte behöver vricka tungan:

pastie 1

"Using static members" kommer som sagt i c# 6.0, vilket motsvarar Visual Studio 2015. Har man inte så nytt IDE så finns framförallt två alternativ.

Det mer tveksamma alternativet är att ärva från klassen med hjälp metoder. Här beror det mycket på vad klasserna gör mer exakt. Det funkar inte så bra om klassen redan ärver från en klass då det inte finns multiple inheritance. Det kan också låsa upp kod designen så det blir svårt att ändra senare.

pastie 2

Om hjälp metoderna gäller för objekt av någon speciell klass kan du använda "extension methods". Det ger en klass extra metoder som om de var en del av klassen. Emellertid går alltid de egna metoderna i klassen före extensions om de råkar ha samma namn. Mer info här.

pastie 3

Bortsett från dessa alternativ är det enklaste att bara gilla läget. Det finns andra sätt att få koden snygg. Gillar du inte att behöva nämna klassen innan statiska metoder (vilket jag sympatiserar med) så kan du kanske t.ex. dra ut det till små privata metoder med beskrivande namn?

Jag har sett extensions och det verkar minst sagt awesome, men är inte applicerbart i det här fallet. Arv känns inte heller som ett alternativ.


Då är det alltså som det är. Tack för hjälpen alla. Jag hade hoppats på att jag missat något bra men språket har (hade) här sina begränsningar.
BYT BORD TILL


 
  Slippa reklamen? Bli Guldmedlem!